Commit 1c12c334ed for frr

commit 1c12c334eda0f5a6a3f4c69ce99aef84c831ca8b
Author: Donald Sharp <sharpd@nvidia.com>
Date:   Wed Sep 23 14:01:16 2026 -0400

    isisd: Ignore LAN pseudonode LSP's in the TED

    TED vertices are keyed by the 6-byte sysid alone.  A LAN pseudonode
    LSP reuses the DIS system ID, so isis_te_parse_lsp() treated r2.XX-00
    as r2.00-00.  The PSN has no Local/Remote IP sub-TLV's, outgoing edges
    were parked ORPHAN, and ls_vertex_clean() dropped the real point-to-point
    TE edges.  isis_te_delete_lsp() also has the same problem, so aging out
    a purged pseudonode deleted the router vertex even though the node LSP
    was still in the LSDB.

    Skip both parse and delete when LSP_PSEUDO_ID is non-zero.

    Signed-off-by: Donald Sharp <sharpd@nvidia.com>

diff --git a/isisd/isis_te.c b/isisd/isis_te.c
index 71442c46b3..b931a332a6 100644
--- a/isisd/isis_te.c
+++ b/isisd/isis_te.c
@@ -1447,6 +1447,17 @@ static int lsp_to_subnet_cb(const struct prefix *prefix, uint32_t metric, bool e
 	return LSP_ITER_CONTINUE;
 }

+/*
+ * A LAN pseudonode LSP reuses the DIS system ID. TED vertices are indexed
+ * by that system ID alone, so the pseudonode must not be parsed or deleted
+ * as the router node: the pseudonode carries no TE IP sub-TLVs, and doing
+ * so orphans or removes the real router's edges.
+ */
+static bool isis_te_lsp_is_pseudonode(const struct isis_lsp *lsp)
+{
+	return LSP_PSEUDO_ID(lsp->hdr.lsp_id) != 0;
+}
+
 /**
  * Parse ISIS LSP to fulfill the Link State Database
  *
@@ -1466,6 +1477,12 @@ static void isis_te_parse_lsp(struct mpls_te_area *mta, struct isis_lsp *lsp)
 	if (!IS_MPLS_TE(mta) || !mta->ted || !lsp)
 		return;

+	if (isis_te_lsp_is_pseudonode(lsp)) {
+		te_debug("ISIS-TE(%s): Skip pseudonode LSP %pSY", lsp->area->area_tag,
+			 lsp->hdr.lsp_id);
+		return;
+	}
+
 	ted = mta->ted;

 	te_debug("ISIS-TE(%s): Parse LSP %pSY", lsp->area->area_tag, lsp->hdr.lsp_id);
@@ -1543,6 +1560,12 @@ static void isis_te_delete_lsp(struct mpls_te_area *mta, struct isis_lsp *lsp)
 	if (!IS_MPLS_TE(mta) || !mta->ted || !lsp)
 		return;

+	if (isis_te_lsp_is_pseudonode(lsp)) {
+		te_debug("ISIS-TE(%s): Skip pseudonode LSP %pSY", lsp->area->area_tag,
+			 lsp->hdr.lsp_id);
+		return;
+	}
+
 	te_debug("ISIS-TE(%s): Delete Link State TED objects from LSP %pSY", lsp->area->area_tag,
 		 lsp->hdr.lsp_id);