static void process_N (struct isis_spftree *spftree, enum vertextype vtype, void *id, u_int16_t dist, u_int16_t depth, struct isis_adjacency *adj, int family) { struct isis_vertex *vertex; #ifdef EXTREME_DEBUG u_char buff[255]; #endif /* C.2.6 b) */ if (dist > MAX_PATH_METRIC) return; /* c) */ vertex = isis_find_vertex (spftree->paths, id, vtype); if (vertex) { #ifdef EXTREME_DEBUG zlog_debug ("ISIS-Spf: process_N %s %s dist %d already found from PATH", vtype2string (vtype), vid2string (vertex, buff), dist); #endif /* EXTREME_DEBUG */ assert (dist >= vertex->d_N); return; } vertex = isis_find_vertex (spftree->tents, id, vtype); /* d) */ if (vertex) { /* 1) */ #ifdef EXTREME_DEBUG zlog_debug ("ISIS-Spf: process_N %s %s dist %d", vtype2string (vtype), vid2string (vertex, buff), dist); #endif /* EXTREME_DEBUG */ if (vertex->d_N == dist) { if (adj) listnode_add (vertex->Adj_N, adj); /* 2) */ if (listcount (vertex->Adj_N) > ISIS_MAX_PATH_SPLITS) remove_excess_adjs (vertex->Adj_N); /* 3) */ return; } else if (vertex->d_N < dist) { return; /* 4) */ } else { listnode_delete (spftree->tents, vertex); } } isis_spf_add2tent (spftree, vtype, id, adj, dist, depth, family); return; }
static void process_N (struct isis_spftree *spftree, enum vertextype vtype, void *id, u_int16_t dist, u_int16_t depth, struct isis_adjacency *adj, int family) { struct isis_vertex *vertex; /* C.2.6 b) */ if (dist > MAX_PATH_METRIC) return; /* c) */ vertex = isis_find_vertex (spftree->paths, id, vtype); if (vertex) { assert (dist >= vertex->d_N); return; } vertex = isis_find_vertex (spftree->tents, id, vtype); /* d) */ if (vertex) { /* 1) */ if (vertex->d_N == dist) { if (adj) listnode_add (vertex->Adj_N, adj); /* 2) */ if (listcount (vertex->Adj_N) > ISIS_MAX_PATH_SPLITS) remove_excess_adjs (vertex->Adj_N); /* 3) */ return; } else if (vertex->d_N < dist) { return; /* 4) */ } else { listnode_delete (spftree->tents, vertex); } } isis_spf_add2tent (spftree, vtype, id, adj, dist, depth, family); return; }