summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Franke <chris@opensourcerouting.org>2018-09-28 15:39:01 +0200
committerChristian Franke <chris@opensourcerouting.org>2018-10-05 14:05:31 +0200
commitd56afe53aa57b205936d64a394acde19e9280c0d (patch)
tree3363370f89eb8812792cf9444dd96dfe57b0a96c
parent215eccb0b8e7e19e6796cb945fba7c5f27bbee47 (diff)
isisd: Add a hook when writing interface config
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
-rw-r--r--isisd/isis_circuit.c6
-rw-r--r--isisd/isis_circuit.h4
-rw-r--r--isisd/isis_main.c2
-rw-r--r--isisd/isis_mt.c8
-rw-r--r--isisd/isis_mt.h2
5 files changed, 19 insertions, 3 deletions
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