u_int16_t depth; /* The depth in the imaginary tree */
struct list *Adj_N; /* {Adj(N)} next hop or neighbor list */
struct list *parents; /* list of parents for ECMP */
- struct list *children; /* list of children used for tree dump */
uint64_t insert_counter;
};
vertex->Adj_N = list_new();
vertex->parents = list_new();
- vertex->children = list_new();
return vertex;
}
vertex->Adj_N = NULL;
list_delete(vertex->parents);
vertex->parents = NULL;
- list_delete(vertex->children);
- vertex->children = NULL;
memset(vertex, 0, sizeof(struct isis_vertex));
XFREE(MTYPE_ISIS_VERTEX, vertex);
if (parent) {
listnode_add(vertex->parents, parent);
- if (listnode_lookup(parent->children, vertex) == NULL)
- listnode_add(parent->children, vertex);
}
if (parent && parent->Adj_N && listcount(parent->Adj_N) > 0) {
if (parent && (listnode_lookup(vertex->parents, parent)
== NULL))
listnode_add(vertex->parents, parent);
- if (parent && (listnode_lookup(parent->children, vertex)
- == NULL))
- listnode_add(parent->children, vertex);
return;
} else if (vertex->d_N < cost) {
/* e) do nothing */
struct listnode *pnode, *pnextnode;
struct isis_vertex *pvertex;
isis_vertex_queue_delete(&spftree->tents, vertex);
- assert(listcount(vertex->children) == 0);
- for (ALL_LIST_ELEMENTS(vertex->parents, pnode,
- pnextnode, pvertex))
- listnode_delete(pvertex->children, vertex);
isis_vertex_del(vertex);
}
}
remove_excess_adjs(vertex->Adj_N);
if (listnode_lookup(vertex->parents, parent) == NULL)
listnode_add(vertex->parents, parent);
- if (listnode_lookup(parent->children, vertex) == NULL)
- listnode_add(parent->children, vertex);
- /* 3) */
return;
} else if (vertex->d_N < dist) {
return;
struct listnode *pnode, *pnextnode;
struct isis_vertex *pvertex;
isis_vertex_queue_delete(&spftree->tents, vertex);
- assert(listcount(vertex->children) == 0);
- for (ALL_LIST_ELEMENTS(vertex->parents, pnode,
- pnextnode, pvertex))
- listnode_delete(pvertex->children, vertex);
isis_vertex_del(vertex);
}
}