mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 16:04:49 +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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_HOOK(isis_adj_state_change_hook, (struct isis_adjacency *adj), (adj))
|
||||||
|
|
||||||
void isis_delete_adj(void *arg)
|
void isis_delete_adj(void *arg)
|
||||||
{
|
{
|
||||||
struct isis_adjacency *adj = arg;
|
struct isis_adjacency *adj = arg;
|
||||||
@ -130,6 +132,10 @@ void isis_delete_adj(void *arg)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
THREAD_TIMER_OFF(adj->t_expire);
|
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 */
|
/* remove from SPF trees */
|
||||||
spftree_area_adj_del(adj->circuit->area, adj);
|
spftree_area_adj_del(adj->circuit->area, adj);
|
||||||
@ -256,8 +262,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
|
|||||||
continue;
|
continue;
|
||||||
if (new_state == ISIS_ADJ_UP) {
|
if (new_state == ISIS_ADJ_UP) {
|
||||||
circuit->upadjcount[level - 1]++;
|
circuit->upadjcount[level - 1]++;
|
||||||
isis_event_adjacency_state_change(adj,
|
hook_call(isis_adj_state_change_hook, adj);
|
||||||
new_state);
|
|
||||||
/* update counter & timers for debugging
|
/* update counter & timers for debugging
|
||||||
* purposes */
|
* purposes */
|
||||||
adj->last_flap = time(NULL);
|
adj->last_flap = time(NULL);
|
||||||
@ -270,8 +275,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
|
|||||||
if (circuit->upadjcount[level - 1] == 0)
|
if (circuit->upadjcount[level - 1] == 0)
|
||||||
isis_tx_queue_clean(circuit->tx_queue);
|
isis_tx_queue_clean(circuit->tx_queue);
|
||||||
|
|
||||||
isis_event_adjacency_state_change(adj,
|
hook_call(isis_adj_state_change_hook, adj);
|
||||||
new_state);
|
|
||||||
del = true;
|
del = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,8 +303,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
|
|||||||
continue;
|
continue;
|
||||||
if (new_state == ISIS_ADJ_UP) {
|
if (new_state == ISIS_ADJ_UP) {
|
||||||
circuit->upadjcount[level - 1]++;
|
circuit->upadjcount[level - 1]++;
|
||||||
isis_event_adjacency_state_change(adj,
|
hook_call(isis_adj_state_change_hook, adj);
|
||||||
new_state);
|
|
||||||
|
|
||||||
if (adj->sys_type == ISIS_SYSTYPE_UNKNOWN)
|
if (adj->sys_type == ISIS_SYSTYPE_UNKNOWN)
|
||||||
send_hello(circuit, level);
|
send_hello(circuit, level);
|
||||||
@ -326,8 +329,7 @@ void isis_adj_state_change(struct isis_adjacency *adj,
|
|||||||
if (circuit->upadjcount[level - 1] == 0)
|
if (circuit->upadjcount[level - 1] == 0)
|
||||||
isis_tx_queue_clean(circuit->tx_queue);
|
isis_tx_queue_clean(circuit->tx_queue);
|
||||||
|
|
||||||
isis_event_adjacency_state_change(adj,
|
hook_call(isis_adj_state_change_hook, adj);
|
||||||
new_state);
|
|
||||||
del = true;
|
del = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,6 +114,7 @@ void isis_delete_adj(void *adj);
|
|||||||
void isis_adj_process_threeway(struct isis_adjacency *adj,
|
void isis_adj_process_threeway(struct isis_adjacency *adj,
|
||||||
struct isis_threeway_adj *tw_adj,
|
struct isis_threeway_adj *tw_adj,
|
||||||
enum isis_adj_usage adj_usage);
|
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,
|
void isis_adj_state_change(struct isis_adjacency *adj,
|
||||||
enum isis_adj_state state, const char *reason);
|
enum isis_adj_state state, const char *reason);
|
||||||
void isis_adj_print(struct isis_adjacency *adj);
|
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 */
|
/* events supporting code */
|
||||||
|
|
||||||
int isis_event_dis_status_change(struct thread *thread)
|
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
|
* 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);
|
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);
|
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 */
|
/* sets SRMflags for all active circuits of an lsp */
|
||||||
void lsp_set_all_srmflags(struct isis_lsp *lsp, bool set);
|
void lsp_set_all_srmflags(struct isis_lsp *lsp, bool set);
|
||||||
void lsp_flood(struct isis_lsp *lsp, struct isis_circuit *circuit);
|
void lsp_flood(struct isis_lsp *lsp, struct isis_circuit *circuit);
|
||||||
|
void lsp_init(void);
|
||||||
|
|
||||||
#endif /* ISIS_LSP */
|
#endif /* ISIS_LSP */
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
#include "isisd/isis_errors.h"
|
#include "isisd/isis_errors.h"
|
||||||
#include "isisd/isis_vty_common.h"
|
#include "isisd/isis_vty_common.h"
|
||||||
#include "isisd/isis_bfd.h"
|
#include "isisd/isis_bfd.h"
|
||||||
|
#include "isisd/isis_lsp.h"
|
||||||
|
|
||||||
/* Default configuration file name */
|
/* Default configuration file name */
|
||||||
#define ISISD_DEFAULT_CONFIG "isisd.conf"
|
#define ISISD_DEFAULT_CONFIG "isisd.conf"
|
||||||
@ -214,6 +215,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
isis_redist_init();
|
isis_redist_init();
|
||||||
isis_route_map_init();
|
isis_route_map_init();
|
||||||
isis_mpls_te_init();
|
isis_mpls_te_init();
|
||||||
|
lsp_init();
|
||||||
|
|
||||||
/* create the global 'isis' instance */
|
/* create the global 'isis' instance */
|
||||||
isis_new(1);
|
isis_new(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user