diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 58c6dfa368..313564d95b 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -924,6 +924,10 @@ void isis_circuit_print_vty(struct isis_circuit *circuit, struct vty *vty, return; } +DEFINE_HOOK(isis_circuit_config_write, + (struct isis_circuit *circuit, struct vty *vty), + (circuit, vty)) + int isis_interface_config_write(struct vty *vty) { struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT); @@ -1138,7 +1142,7 @@ int isis_interface_config_write(struct vty *vty) circuit->passwd.passwd); write++; } - write += circuit_write_mt_settings(circuit, vty); + write += hook_call(isis_circuit_config_write, circuit, vty); } vty_endframe(vty, "!\n"); } diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h index 02abbb49ad..e83424a4ad 100644 --- a/isisd/isis_circuit.h +++ b/isisd/isis_circuit.h @@ -193,4 +193,8 @@ ferr_r isis_circuit_passwd_hmac_md5_set(struct isis_circuit *circuit, int isis_circuit_mt_enabled_set(struct isis_circuit *circuit, uint16_t mtid, bool enabled); +DECLARE_HOOK(isis_circuit_config_write, + (struct isis_circuit *circuit, struct vty *vty), + (circuit, vty)) + #endif /* _ZEBRA_ISIS_CIRCUIT_H */ diff --git a/isisd/isis_main.c b/isisd/isis_main.c index 474184fbd3..7956ddeaf1 100644 --- a/isisd/isis_main.c +++ b/isisd/isis_main.c @@ -57,6 +57,7 @@ #include "isisd/isis_vty_common.h" #include "isisd/isis_bfd.h" #include "isisd/isis_lsp.h" +#include "isisd/isis_mt.h" /* Default configuration file name */ #define ISISD_DEFAULT_CONFIG "isisd.conf" @@ -216,6 +217,7 @@ int main(int argc, char **argv, char **envp) isis_route_map_init(); isis_mpls_te_init(); lsp_init(); + mt_init(); /* create the global 'isis' instance */ isis_new(1); diff --git a/isisd/isis_mt.c b/isisd/isis_mt.c index e0227f4656..1b7fa5a46e 100644 --- a/isisd/isis_mt.c +++ b/isisd/isis_mt.c @@ -302,7 +302,7 @@ circuit_get_mt_setting(struct isis_circuit *circuit, uint16_t mtid) return setting; } -int circuit_write_mt_settings(struct isis_circuit *circuit, struct vty *vty) +static int circuit_write_mt_settings(struct isis_circuit *circuit, struct vty *vty) { int written = 0; struct listnode *node; @@ -551,3 +551,9 @@ void tlvs_add_mt_p2p(struct isis_tlvs *tlvs, struct isis_circuit *circuit, tlvs_add_mt_set(circuit->area, tlvs, adj->mt_count, adj->mt_set, id, metric, subtlvs, subtlv_len); } + +void mt_init(void) +{ + hook_register(isis_circuit_config_write, + circuit_write_mt_settings); +} diff --git a/isisd/isis_mt.h b/isisd/isis_mt.h index 8c57d24afa..515b63f50f 100644 --- a/isisd/isis_mt.h +++ b/isisd/isis_mt.h @@ -109,7 +109,6 @@ void circuit_mt_init(struct isis_circuit *circuit); void circuit_mt_finish(struct isis_circuit *circuit); struct isis_circuit_mt_setting * circuit_get_mt_setting(struct isis_circuit *circuit, uint16_t mtid); -int circuit_write_mt_settings(struct isis_circuit *circuit, struct vty *vty); struct isis_circuit_mt_setting ** circuit_mt_settings(struct isis_circuit *circuit, unsigned int *mt_count); bool tlvs_to_adj_mt_set(struct isis_tlvs *tlvs, bool v4_usable, bool v6_usable, @@ -122,4 +121,5 @@ void tlvs_add_mt_bcast(struct isis_tlvs *tlvs, struct isis_circuit *circuit, void tlvs_add_mt_p2p(struct isis_tlvs *tlvs, struct isis_circuit *circuit, uint8_t *id, uint32_t metric, uint8_t *subtlvs, uint8_t subtlv_len); +void mt_init(void); #endif