summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--isisd/isis_adjacency.c2
-rw-r--r--isisd/isis_lsp.c24
-rw-r--r--tests/topotests/isis_topo1/test_isis_topo1.py3
3 files changed, 21 insertions, 8 deletions
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c
index 430bee92bf..ad63398715 100644
--- a/isisd/isis_adjacency.c
+++ b/isisd/isis_adjacency.c
@@ -293,7 +293,7 @@ const char *isis_adj_name(const struct isis_adjacency *adj)
struct isis_dynhn *dyn;
dyn = dynhn_find_by_id(adj->circuit->isis, adj->sysid);
- if (dyn)
+ if (adj->circuit->area->dynhostname && dyn)
return dyn->hostname;
snprintfrr(buf, sizeof(buf), "%pSY", adj->sysid);
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index c98cee06a5..79c2914445 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -482,13 +482,19 @@ static void lsp_update_data(struct isis_lsp *lsp, struct isis_lsp_hdr *hdr,
lsp->tlvs = tlvs;
- if (area->dynhostname && lsp->tlvs->hostname
- && lsp->hdr.rem_lifetime) {
- isis_dynhn_insert(
- area->isis, lsp->hdr.lsp_id, lsp->tlvs->hostname,
- (lsp->hdr.lsp_bits & LSPBIT_IST) == IS_LEVEL_1_AND_2
- ? IS_LEVEL_2
- : IS_LEVEL_1);
+ if (area->dynhostname && lsp->hdr.rem_lifetime) {
+ if (lsp->tlvs->hostname) {
+ isis_dynhn_insert(area->isis, lsp->hdr.lsp_id,
+ lsp->tlvs->hostname,
+ (lsp->hdr.lsp_bits & LSPBIT_IST) ==
+ IS_LEVEL_1_AND_2
+ ? IS_LEVEL_2
+ : IS_LEVEL_1);
+ } else {
+ if (!LSP_PSEUDO_ID(lsp->hdr.lsp_id) &&
+ !LSP_FRAGMENT(lsp->hdr.lsp_id))
+ isis_dynhn_remove(area->isis, lsp->hdr.lsp_id);
+ }
}
return;
@@ -2225,6 +2231,10 @@ void lsp_tick(struct event *thread)
&area->lspdb[level],
next);
+ if (!LSP_PSEUDO_ID(lsp->hdr.lsp_id))
+ isis_dynhn_remove(area->isis,
+ lsp->hdr.lsp_id);
+
lspdb_del(&area->lspdb[level], lsp);
lsp_destroy(lsp);
lsp = NULL;
diff --git a/tests/topotests/isis_topo1/test_isis_topo1.py b/tests/topotests/isis_topo1/test_isis_topo1.py
index b388f52bd9..9615d30d3c 100644
--- a/tests/topotests/isis_topo1/test_isis_topo1.py
+++ b/tests/topotests/isis_topo1/test_isis_topo1.py
@@ -685,6 +685,9 @@ def _check_lsp_overload_bit(router, overloaded_router_lsp, att_p_ol_expected):
)
database_json = json.loads(isis_database_output)
+ if "lsps" not in database_json["areas"][0]["levels"][1]:
+ return "The LSP of {} has not been synchronized yet ".format(router.name)
+
att_p_ol = database_json["areas"][0]["levels"][1]["lsps"][0]["attPOl"]
if att_p_ol == att_p_ol_expected:
return True