summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-05-15 19:31:27 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-05-15 19:31:27 -0400
commit6df853648784baf44c55d026bd8e4f0976bd1607 (patch)
treee29512e029db8787d0c1883627512034e97f8c50
parent759927a1b9e1a0a820e05dbb6ce12fb16c8f9b34 (diff)
*: Consolidate vrf_hooks into vrf_init
We only needed to add/change the vrf callbacks when we initialize the vrf subsystem. As such it is not necessary to handle the callbacks in any other way than through the init function. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--bgpd/bgp_main.c15
-rw-r--r--eigrpd/eigrp_main.c2
-rw-r--r--isisd/isis_main.c2
-rw-r--r--ldpd/ldpd.c2
-rw-r--r--lib/vrf.c37
-rw-r--r--lib/vrf.h26
-rw-r--r--nhrpd/nhrp_main.c2
-rw-r--r--ospf6d/ospf6_main.c2
-rw-r--r--ospfd/ospf_main.c2
-rw-r--r--pimd/pimd.c15
-rw-r--r--ripd/rip_main.c2
-rw-r--r--ripngd/ripng_main.c2
-rw-r--r--zebra/zebra_vrf.c9
13 files changed, 33 insertions, 85 deletions
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 3b844cf70e..644a091c31 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -327,22 +327,15 @@ bgp_vrf_disable (struct vrf *vrf)
static void
bgp_vrf_init (void)
{
- vrf_add_hook (VRF_NEW_HOOK, bgp_vrf_new);
- vrf_add_hook (VRF_ENABLE_HOOK, bgp_vrf_enable);
- vrf_add_hook (VRF_DISABLE_HOOK, bgp_vrf_disable);
- vrf_add_hook (VRF_DELETE_HOOK, bgp_vrf_delete);
-
- vrf_init ();
+ vrf_init (bgp_vrf_new,
+ bgp_vrf_enable,
+ bgp_vrf_disable,
+ bgp_vrf_delete);
}
static void
bgp_vrf_terminate (void)
{
- vrf_add_hook (VRF_NEW_HOOK, NULL);
- vrf_add_hook (VRF_ENABLE_HOOK, NULL);
- vrf_add_hook (VRF_DISABLE_HOOK, NULL);
- vrf_add_hook (VRF_DELETE_HOOK, NULL);
-
vrf_terminate ();
}
diff --git a/eigrpd/eigrp_main.c b/eigrpd/eigrp_main.c
index 6a5e3b1a04..e71464fdbb 100644
--- a/eigrpd/eigrp_main.c
+++ b/eigrpd/eigrp_main.c
@@ -182,7 +182,7 @@ main (int argc, char **argv, char **envp)
eigrp_om->master = frr_init();
master = eigrp_om->master;
- vrf_init ();
+ vrf_init (NULL, NULL, NULL, NULL);
/*EIGRPd init*/
eigrp_if_init ();
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index 644b652d44..b895f61dce 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -206,7 +206,7 @@ main (int argc, char **argv, char **envp)
* initializations
*/
access_list_init();
- vrf_init ();
+ vrf_init (NULL, NULL, NULL, NULL);
prefix_list_init();
isis_init ();
isis_circuit_init ();
diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c
index a0b021dfd9..710dcd15f4 100644
--- a/ldpd/ldpd.c
+++ b/ldpd/ldpd.c
@@ -329,7 +329,7 @@ main(int argc, char *argv[])
cmd_init(1);
vty_config_lockless();
vty_init(master);
- vrf_init();
+ vrf_init(NULL, NULL, NULL, NULL);
access_list_init();
ldp_vty_init();
ldp_zebra_init(master);
diff --git a/lib/vrf.c b/lib/vrf.c
index 41b6a05b3a..7d8a118763 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -238,33 +238,6 @@ vrf_disable (struct vrf *vrf)
(*vrf_master.vrf_disable_hook) (vrf);
}
-
-/* Add a VRF hook. Please add hooks before calling vrf_init(). */
-void
-vrf_add_hook (int type, int (*func)(struct vrf *))
-{
- if (debug_vrf)
- zlog_debug ("%s: Add Hook %d to function %p", __PRETTY_FUNCTION__,
- type, func);
-
- switch (type) {
- case VRF_NEW_HOOK:
- vrf_master.vrf_new_hook = func;
- break;
- case VRF_DELETE_HOOK:
- vrf_master.vrf_delete_hook = func;
- break;
- case VRF_ENABLE_HOOK:
- vrf_master.vrf_enable_hook = func;
- break;
- case VRF_DISABLE_HOOK:
- vrf_master.vrf_disable_hook = func;
- break;
- default:
- break;
- }
-}
-
vrf_id_t
vrf_name_to_id (const char *name)
{
@@ -407,13 +380,21 @@ vrf_bitmap_check (vrf_bitmap_t bmap, vrf_id_t vrf_id)
/* Initialize VRF module. */
void
-vrf_init (void)
+vrf_init (int (*create)(struct vrf *),
+ int (*enable)(struct vrf *),
+ int (*disable)(struct vrf *),
+ int (*delete)(struct vrf *))
{
struct vrf *default_vrf;
if (debug_vrf)
zlog_debug ("%s: Initializing VRF subsystem", __PRETTY_FUNCTION__);
+ vrf_master.vrf_new_hook = create;
+ vrf_master.vrf_enable_hook = enable;
+ vrf_master.vrf_disable_hook = disable;
+ vrf_master.vrf_delete_hook = delete;
+
/* The default VRF always exists. */
default_vrf = vrf_get (VRF_DEFAULT, VRF_DEFAULT_NAME);
if (!default_vrf)
diff --git a/lib/vrf.h b/lib/vrf.h
index 053be89684..a08258a929 100644
--- a/lib/vrf.h
+++ b/lib/vrf.h
@@ -57,15 +57,6 @@ enum {
#define VRF_CMD_HELP_STR "Specify the VRF\nThe VRF name\n"
#define VRF_ALL_CMD_HELP_STR "Specify the VRF\nAll VRFs\n"
-/*
- * VRF hooks
- */
-
-#define VRF_NEW_HOOK 0 /* a new VRF is just created */
-#define VRF_DELETE_HOOK 1 /* a VRF is to be deleted */
-#define VRF_ENABLE_HOOK 2 /* a VRF is ready to use */
-#define VRF_DISABLE_HOOK 3 /* a VRF is to be unusable */
-
struct vrf
{
RB_ENTRY(vrf) id_entry, name_entry;
@@ -98,18 +89,6 @@ DECLARE_QOBJ_TYPE(vrf)
extern struct vrf_id_head vrfs_by_id;
extern struct vrf_name_head vrfs_by_name;
-/*
- * Add a specific hook to VRF module.
- * @param1: hook type
- * @param2: the callback function
- * - param 1: the VRF ID
- * - param 2: the address of the user data pointer (the user data
- * can be stored in or freed from there)
- */
-extern void vrf_add_hook (int, int (*)(struct vrf *));
-
-int (*vrf_callback)(struct vrf *);
-
extern struct vrf *vrf_lookup_by_id (vrf_id_t);
extern struct vrf *vrf_lookup_by_name (const char *);
extern struct vrf *vrf_get (vrf_id_t, const char *);
@@ -166,7 +145,10 @@ extern int vrf_bitmap_check (vrf_bitmap_t, vrf_id_t);
* VRF initializer/destructor
*/
/* Please add hooks before calling vrf_init(). */
-extern void vrf_init (void);
+extern void vrf_init (int (*create)(struct vrf *),
+ int (*enable)(struct vrf *),
+ int (*disable)(struct vrf *),
+ int (*delete)(struct vrf *));
extern void vrf_terminate (void);
extern void vrf_cmd_init (int (*writefunc)(struct vty *vty));
diff --git a/nhrpd/nhrp_main.c b/nhrpd/nhrp_main.c
index a44ce35bb8..7c5d80336c 100644
--- a/nhrpd/nhrp_main.c
+++ b/nhrpd/nhrp_main.c
@@ -129,7 +129,7 @@ int main(int argc, char **argv)
/* Library inits. */
master = frr_init();
nhrp_interface_init();
- vrf_init();
+ vrf_init(NULL, NULL, NULL, NULL);
resolver_init();
/* Run with elevated capabilities, as for all netlink activity
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index 54ae4645ad..198a881106 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -222,7 +222,7 @@ main (int argc, char *argv[], char *envp[])
/* thread master */
master = frr_init ();
- vrf_init ();
+ vrf_init (NULL, NULL, NULL, NULL);
access_list_init ();
prefix_list_init ();
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 38718b35d5..a5f430e051 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -207,7 +207,7 @@ main (int argc, char **argv)
/* Library inits. */
debug_init ();
- vrf_init ();
+ vrf_init (NULL, NULL, NULL, NULL);
access_list_init ();
prefix_list_init ();
diff --git a/pimd/pimd.c b/pimd/pimd.c
index fc6663776b..6b75a93914 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -141,22 +141,15 @@ pim_vrf_disable (struct vrf *vrf)
void
pim_vrf_init (void)
{
- vrf_add_hook (VRF_NEW_HOOK, pim_vrf_new);
- vrf_add_hook (VRF_ENABLE_HOOK, pim_vrf_enable);
- vrf_add_hook (VRF_DISABLE_HOOK, pim_vrf_disable);
- vrf_add_hook (VRF_DELETE_HOOK, pim_vrf_delete);
-
- vrf_init ();
+ vrf_init (pim_vrf_new,
+ pim_vrf_enable,
+ pim_vrf_disable,
+ pim_vrf_delete);
}
static void
pim_vrf_terminate (void)
{
- vrf_add_hook (VRF_NEW_HOOK, NULL);
- vrf_add_hook (VRF_ENABLE_HOOK, NULL);
- vrf_add_hook (VRF_DISABLE_HOOK, NULL);
- vrf_add_hook (VRF_DELETE_HOOK, NULL);
-
vrf_terminate ();
}
diff --git a/ripd/rip_main.c b/ripd/rip_main.c
index 62ea6dd078..a4509cc064 100644
--- a/ripd/rip_main.c
+++ b/ripd/rip_main.c
@@ -178,7 +178,7 @@ main (int argc, char **argv)
/* Library initialization. */
keychain_init ();
- vrf_init ();
+ vrf_init (NULL, NULL, NULL, NULL);
/* RIP related initialization. */
rip_init ();
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index 9d97df5c41..5767b08636 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -178,7 +178,7 @@ main (int argc, char **argv)
master = frr_init ();
/* Library inits. */
- vrf_init ();
+ vrf_init (NULL, NULL, NULL, NULL);
/* RIPngd inits. */
ripng_init ();
diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c
index 6b36891056..1e6142038d 100644
--- a/zebra/zebra_vrf.c
+++ b/zebra/zebra_vrf.c
@@ -536,11 +536,10 @@ vrf_config_write (struct vty *vty)
void
zebra_vrf_init (void)
{
- vrf_add_hook (VRF_NEW_HOOK, zebra_vrf_new);
- vrf_add_hook (VRF_ENABLE_HOOK, zebra_vrf_enable);
- vrf_add_hook (VRF_DISABLE_HOOK, zebra_vrf_disable);
- vrf_add_hook (VRF_DELETE_HOOK, zebra_vrf_delete);
+ vrf_init (zebra_vrf_new,
+ zebra_vrf_enable,
+ zebra_vrf_disable,
+ zebra_vrf_delete);
- vrf_init ();
vrf_cmd_init (vrf_config_write);
}