mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 08:50:26 +00:00
isisd: Replace isis_event_adjacency_state_change with a hook
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
This commit is contained in:
parent
52df822874
commit
a5b5e946ce
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user