summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Franke <chris@opensourcerouting.org>2018-03-05 21:01:21 +0100
committerChristian Franke <chris@opensourcerouting.org>2018-03-10 18:38:03 +0100
commit44b895115e74b68e2654aaac33a2bc5602392770 (patch)
treef80ad79e1706b89e57aefe336e51893ff3c6793c
parent42fe2621979edcfee30f9bf3f794f66f73f3e71e (diff)
isisd: P2P adjacencies should only be included in LSPDB/SPF when they are up
-rw-r--r--isisd/isis_lsp.c3
-rw-r--r--isisd/isis_spf.c2
-rw-r--r--isisd/isis_te.c3
3 files changed, 5 insertions, 3 deletions
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 34eac676d6..b2ba8b3932 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -1034,7 +1034,8 @@ static void lsp_build(struct isis_lsp *lsp, struct isis_area *area)
break;
case CIRCUIT_T_P2P: {
struct isis_adjacency *nei = circuit->u.p2p.neighbor;
- if (nei && (level & nei->circuit_t)) {
+ if (nei && nei->adj_state == ISIS_ADJ_UP
+ && (level & nei->circuit_t)) {
uint8_t ne_id[7];
memcpy(ne_id, nei->sysid, ISIS_SYS_ID_LEN);
LSP_PSEUDO_ID(ne_id) = 0;
diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c
index ee447d01f7..dc86d4c105 100644
--- a/isisd/isis_spf.c
+++ b/isisd/isis_spf.c
@@ -1152,7 +1152,7 @@ static int isis_spf_preload_tent(struct isis_spftree *spftree,
root_sysid, parent);
} else if (circuit->circ_type == CIRCUIT_T_P2P) {
adj = circuit->u.p2p.neighbor;
- if (!adj)
+ if (!adj || adj->adj_state != ISIS_ADJ_UP)
continue;
if (!adj_has_mt(adj, spftree->mtid))
continue;
diff --git a/isisd/isis_te.c b/isisd/isis_te.c
index 079340b4a4..5de936a6ea 100644
--- a/isisd/isis_te.c
+++ b/isisd/isis_te.c
@@ -549,7 +549,8 @@ void isis_link_params_update(struct isis_circuit *circuit,
if ((SUBTLV_TYPE(mtc->rmt_ipaddr) == 0)
&& (circuit->circ_type == CIRCUIT_T_P2P)) {
struct isis_adjacency *adj = circuit->u.p2p.neighbor;
- if (adj->ipv4_address_count) {
+ if (adj && adj->adj_state == ISIS_ADJ_UP
+ && adj->ipv4_address_count) {
set_circuitparams_rmt_ipaddr(
mtc, adj->ipv4_addresses[0]);
}