isisd: Replace isis_event_adjacency_state_change with a hook

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
This commit is contained in:
Christian Franke 2018-09-27 14:23:06 +02:00
parent 52df822874
commit a5b5e946ce
7 changed files with 26 additions and 30 deletions

View File

@ -122,6 +122,8 @@ struct isis_adjacency *isis_adj_lookup_snpa(const uint8_t *ssnpa,
return NULL;
}
DEFINE_HOOK(isis_adj_state_change_hook, (struct isis_adjacency *adj), (adj))
void isis_delete_adj(void *arg)
{
struct isis_adjacency *adj = arg;
@ -130,6 +132,10 @@ void isis_delete_adj(void *arg)
return;
THREAD_TIMER_OFF(adj->t_expire);
if (adj->adj_state != ISIS_ADJ_DOWN) {
adj->adj_state = ISIS_ADJ_DOWN;
hook_call(isis_adj_state_change_hook, adj);
}
/* remove from SPF trees */
spftree_area_adj_del(adj->circuit->area, adj);
@ -256,8 +262,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
continue;
if (new_state == ISIS_ADJ_UP) {
circuit->upadjcount[level - 1]++;
isis_event_adjacency_state_change(adj,
new_state);
hook_call(isis_adj_state_change_hook, adj);
/* update counter & timers for debugging
* purposes */
adj->last_flap = time(NULL);
@ -270,8 +275,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
if (circuit->upadjcount[level - 1] == 0)
isis_tx_queue_clean(circuit->tx_queue);
isis_event_adjacency_state_change(adj,
new_state);
hook_call(isis_adj_state_change_hook, adj);
del = true;
}
@ -299,8 +303,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
continue;
if (new_state == ISIS_ADJ_UP) {
circuit->upadjcount[level - 1]++;
isis_event_adjacency_state_change(adj,
new_state);
hook_call(isis_adj_state_change_hook, adj);
if (adj->sys_type == ISIS_SYSTYPE_UNKNOWN)
send_hello(circuit, level);
@ -326,8 +329,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
if (circuit->upadjcount[level - 1] == 0)
isis_tx_queue_clean(circuit->tx_queue);
isis_event_adjacency_state_change(adj,
new_state);
hook_call(isis_adj_state_change_hook, adj);
del = true;
}
}

View File

@ -114,6 +114,7 @@ void isis_delete_adj(void *adj);
void isis_adj_process_threeway(struct isis_adjacency *adj,
struct isis_threeway_adj *tw_adj,
enum isis_adj_usage adj_usage);
DECLARE_HOOK(isis_adj_state_change_hook, (struct isis_adjacency *adj), (adj))
void isis_adj_state_change(struct isis_adjacency *adj,
enum isis_adj_state state, const char *reason);
void isis_adj_print(struct isis_adjacency *adj);

View File

@ -216,25 +216,6 @@ void isis_circuit_is_type_set(struct isis_circuit *circuit, int newtype)
*
* ***********************************************************************/
void isis_event_adjacency_state_change(struct isis_adjacency *adj, int newstate)
{
/* adjacency state change event.
* - the only proto-type was supported */
/* invalid arguments */
if (!adj || !adj->circuit || !adj->circuit->area)
return;
if (isis->debugs & DEBUG_EVENTS)
zlog_debug("ISIS-Evt (%s) Adjacency State change",
adj->circuit->area->area_tag);
/* LSP generation again */
lsp_regenerate_schedule(adj->circuit->area, IS_LEVEL_1 | IS_LEVEL_2, 0);
return;
}
/* events supporting code */
int isis_event_dis_status_change(struct thread *thread)

View File

@ -31,9 +31,6 @@ void isis_event_circuit_type_change(struct isis_circuit *circuit, int newtype);
/*
* Events related to adjacencies
*/
void isis_event_adjacency_state_change(struct isis_adjacency *adj,
int newstate);
int isis_event_dis_status_change(struct thread *thread);
/*

View File

@ -1997,3 +1997,15 @@ void lsp_flood(struct isis_lsp *lsp, struct isis_circuit *circuit)
fabricd_lsp_flood(lsp);
}
}
static int lsp_handle_adj_state_change(struct isis_adjacency *adj)
{
lsp_regenerate_schedule(adj->circuit->area, IS_LEVEL_1 | IS_LEVEL_2, 0);
return 0;
}
void lsp_init(void)
{
hook_register(isis_adj_state_change_hook,
lsp_handle_adj_state_change);
}

View File

@ -101,5 +101,6 @@ int lsp_print_all(struct vty *vty, dict_t *lspdb, char detail, char dynhost);
/* sets SRMflags for all active circuits of an lsp */
void lsp_set_all_srmflags(struct isis_lsp *lsp, bool set);
void lsp_flood(struct isis_lsp *lsp, struct isis_circuit *circuit);
void lsp_init(void);
#endif /* ISIS_LSP */

View File

@ -56,6 +56,7 @@
#include "isisd/isis_errors.h"
#include "isisd/isis_vty_common.h"
#include "isisd/isis_bfd.h"
#include "isisd/isis_lsp.h"
/* Default configuration file name */
#define ISISD_DEFAULT_CONFIG "isisd.conf"
@ -214,6 +215,7 @@ int main(int argc, char **argv, char **envp)
isis_redist_init();
isis_route_map_init();
isis_mpls_te_init();
lsp_init();
/* create the global 'isis' instance */
isis_new(1);