summaryrefslogtreecommitdiff
path: root/isisd/isis_spf.c
diff options
context:
space:
mode:
authorFritz Reichmann <fritz@reichmann.nl>2011-10-01 17:43:12 +0400
committerDenis Ovsienko <infrastation@yandex.ru>2012-02-14 03:06:29 +0400
commitc25eaffdb2190149e768dc4ee4efc913c6d02992 (patch)
treed8623ba984fcbd1e81815fa0d31f27ef7067d075 /isisd/isis_spf.c
parentd034aa027ef44d0a74805c27ad2a4d8ea20395d1 (diff)
isisd: unexpected kernel routing table (BZ#544)
Fix bug 544: isisd produces an unexpected routing table for wide-metric. * isis_spf.c: Accept VTYPE_PSEUDO_TE_IS and VTYPE_NONPSEUDO_TE_IS vertex types for SPF calculation * isis_pdu.c: Change order of TLVs to match Cisco to make bitwise comparison easier for Wireshark * isis_tlv.c: EXTREME_TLV_DEBUG for TLV debugging instead of EXTREME_DEBUG
Diffstat (limited to 'isisd/isis_spf.c')
-rw-r--r--isisd/isis_spf.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c
index b6178e3a..5d0b161f 100644
--- a/isisd/isis_spf.c
+++ b/isisd/isis_spf.c
@@ -1030,15 +1030,22 @@ isis_run_spf (struct isis_area *area, int level, int family)
while (listcount (spftree->tents) > 0)
{
+ /* C.2.7 a) 1) */
node = listhead (spftree->tents);
vertex = listgetdata (node);
- /* Remove from tent list */
+
+ /* C.2.7 a) 2) */
list_delete_node (spftree->tents, node);
+
+ /* C.2.7 a) 3) */
if (isis_find_vertex (spftree->paths, vertex->N.id, vertex->type))
continue;
add_to_paths (spftree, vertex, area, level);
+
if (vertex->type == VTYPE_PSEUDO_IS ||
- vertex->type == VTYPE_NONPSEUDO_IS)
+ vertex->type == VTYPE_NONPSEUDO_IS ||
+ vertex->type == VTYPE_PSEUDO_TE_IS ||
+ vertex->type == VTYPE_NONPSEUDO_TE_IS )
{
if (listcount(vertex->Adj_N) == 0) {
continue;
@@ -1054,7 +1061,6 @@ isis_run_spf (struct isis_area *area, int level, int family)
{
isis_spf_process_pseudo_lsp (spftree, lsp, vertex->d_N,
vertex->depth, family, adj);
-
}
else
{