*: 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>
This commit is contained in:
Donald Sharp 2017-05-15 19:31:27 -04:00
parent 759927a1b9
commit 6df8536487
13 changed files with 33 additions and 85 deletions

View File

@ -327,22 +327,15 @@ bgp_vrf_disable (struct vrf *vrf)
static void static void
bgp_vrf_init (void) bgp_vrf_init (void)
{ {
vrf_add_hook (VRF_NEW_HOOK, bgp_vrf_new); vrf_init (bgp_vrf_new,
vrf_add_hook (VRF_ENABLE_HOOK, bgp_vrf_enable); bgp_vrf_enable,
vrf_add_hook (VRF_DISABLE_HOOK, bgp_vrf_disable); bgp_vrf_disable,
vrf_add_hook (VRF_DELETE_HOOK, bgp_vrf_delete); bgp_vrf_delete);
vrf_init ();
} }
static void static void
bgp_vrf_terminate (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 (); vrf_terminate ();
} }

View File

@ -182,7 +182,7 @@ main (int argc, char **argv, char **envp)
eigrp_om->master = frr_init(); eigrp_om->master = frr_init();
master = eigrp_om->master; master = eigrp_om->master;
vrf_init (); vrf_init (NULL, NULL, NULL, NULL);
/*EIGRPd init*/ /*EIGRPd init*/
eigrp_if_init (); eigrp_if_init ();

View File

@ -206,7 +206,7 @@ main (int argc, char **argv, char **envp)
* initializations * initializations
*/ */
access_list_init(); access_list_init();
vrf_init (); vrf_init (NULL, NULL, NULL, NULL);
prefix_list_init(); prefix_list_init();
isis_init (); isis_init ();
isis_circuit_init (); isis_circuit_init ();

View File

@ -329,7 +329,7 @@ main(int argc, char *argv[])
cmd_init(1); cmd_init(1);
vty_config_lockless(); vty_config_lockless();
vty_init(master); vty_init(master);
vrf_init(); vrf_init(NULL, NULL, NULL, NULL);
access_list_init(); access_list_init();
ldp_vty_init(); ldp_vty_init();
ldp_zebra_init(master); ldp_zebra_init(master);

View File

@ -238,33 +238,6 @@ vrf_disable (struct vrf *vrf)
(*vrf_master.vrf_disable_hook) (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_id_t
vrf_name_to_id (const char *name) 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. */ /* Initialize VRF module. */
void 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; struct vrf *default_vrf;
if (debug_vrf) if (debug_vrf)
zlog_debug ("%s: Initializing VRF subsystem", __PRETTY_FUNCTION__); 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. */ /* The default VRF always exists. */
default_vrf = vrf_get (VRF_DEFAULT, VRF_DEFAULT_NAME); default_vrf = vrf_get (VRF_DEFAULT, VRF_DEFAULT_NAME);
if (!default_vrf) if (!default_vrf)

View File

@ -57,15 +57,6 @@ enum {
#define VRF_CMD_HELP_STR "Specify the VRF\nThe VRF name\n" #define VRF_CMD_HELP_STR "Specify the VRF\nThe VRF name\n"
#define VRF_ALL_CMD_HELP_STR "Specify the VRF\nAll VRFs\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 struct vrf
{ {
RB_ENTRY(vrf) id_entry, name_entry; 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_id_head vrfs_by_id;
extern struct vrf_name_head vrfs_by_name; 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_id (vrf_id_t);
extern struct vrf *vrf_lookup_by_name (const char *); extern struct vrf *vrf_lookup_by_name (const char *);
extern struct vrf *vrf_get (vrf_id_t, 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 * VRF initializer/destructor
*/ */
/* Please add hooks before calling vrf_init(). */ /* 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_terminate (void);
extern void vrf_cmd_init (int (*writefunc)(struct vty *vty)); extern void vrf_cmd_init (int (*writefunc)(struct vty *vty));

View File

@ -129,7 +129,7 @@ int main(int argc, char **argv)
/* Library inits. */ /* Library inits. */
master = frr_init(); master = frr_init();
nhrp_interface_init(); nhrp_interface_init();
vrf_init(); vrf_init(NULL, NULL, NULL, NULL);
resolver_init(); resolver_init();
/* Run with elevated capabilities, as for all netlink activity /* Run with elevated capabilities, as for all netlink activity

View File

@ -222,7 +222,7 @@ main (int argc, char *argv[], char *envp[])
/* thread master */ /* thread master */
master = frr_init (); master = frr_init ();
vrf_init (); vrf_init (NULL, NULL, NULL, NULL);
access_list_init (); access_list_init ();
prefix_list_init (); prefix_list_init ();

View File

@ -207,7 +207,7 @@ main (int argc, char **argv)
/* Library inits. */ /* Library inits. */
debug_init (); debug_init ();
vrf_init (); vrf_init (NULL, NULL, NULL, NULL);
access_list_init (); access_list_init ();
prefix_list_init (); prefix_list_init ();

View File

@ -141,22 +141,15 @@ pim_vrf_disable (struct vrf *vrf)
void void
pim_vrf_init (void) pim_vrf_init (void)
{ {
vrf_add_hook (VRF_NEW_HOOK, pim_vrf_new); vrf_init (pim_vrf_new,
vrf_add_hook (VRF_ENABLE_HOOK, pim_vrf_enable); pim_vrf_enable,
vrf_add_hook (VRF_DISABLE_HOOK, pim_vrf_disable); pim_vrf_disable,
vrf_add_hook (VRF_DELETE_HOOK, pim_vrf_delete); pim_vrf_delete);
vrf_init ();
} }
static void static void
pim_vrf_terminate (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 (); vrf_terminate ();
} }

View File

@ -178,7 +178,7 @@ main (int argc, char **argv)
/* Library initialization. */ /* Library initialization. */
keychain_init (); keychain_init ();
vrf_init (); vrf_init (NULL, NULL, NULL, NULL);
/* RIP related initialization. */ /* RIP related initialization. */
rip_init (); rip_init ();

View File

@ -178,7 +178,7 @@ main (int argc, char **argv)
master = frr_init (); master = frr_init ();
/* Library inits. */ /* Library inits. */
vrf_init (); vrf_init (NULL, NULL, NULL, NULL);
/* RIPngd inits. */ /* RIPngd inits. */
ripng_init (); ripng_init ();

View File

@ -536,11 +536,10 @@ vrf_config_write (struct vty *vty)
void void
zebra_vrf_init (void) zebra_vrf_init (void)
{ {
vrf_add_hook (VRF_NEW_HOOK, zebra_vrf_new); vrf_init (zebra_vrf_new,
vrf_add_hook (VRF_ENABLE_HOOK, zebra_vrf_enable); zebra_vrf_enable,
vrf_add_hook (VRF_DISABLE_HOOK, zebra_vrf_disable); zebra_vrf_disable,
vrf_add_hook (VRF_DELETE_HOOK, zebra_vrf_delete); zebra_vrf_delete);
vrf_init ();
vrf_cmd_init (vrf_config_write); vrf_cmd_init (vrf_config_write);
} }