Merge pull request #11579 from opensourcerouting/fix/revert_isis_fast_reroute

isisd: Revert fast-reroute recent changes
This commit is contained in:
Mark Stapp 2022-07-11 07:37:00 -04:00 committed by GitHub
commit 3fb4bef537
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
75 changed files with 123 additions and 2601 deletions

View File

@ -212,36 +212,6 @@ static const char *adj_level2string(int level)
return NULL; /* not reached */
}
static void isis_adj_route_switchover(struct isis_adjacency *adj)
{
union g_addr ip = {};
ifindex_t ifindex;
unsigned int i;
if (!adj->circuit || !adj->circuit->interface)
return;
ifindex = adj->circuit->interface->ifindex;
for (i = 0; i < adj->ipv4_address_count; i++) {
ip.ipv4 = adj->ipv4_addresses[i];
isis_circuit_switchover_routes(adj->circuit, AF_INET, &ip,
ifindex);
}
for (i = 0; i < adj->ll_ipv6_count; i++) {
ip.ipv6 = adj->ll_ipv6_addrs[i];
isis_circuit_switchover_routes(adj->circuit, AF_INET6, &ip,
ifindex);
}
for (i = 0; i < adj->global_ipv6_count; i++) {
ip.ipv6 = adj->global_ipv6_addrs[i];
isis_circuit_switchover_routes(adj->circuit, AF_INET6, &ip,
ifindex);
}
}
void isis_adj_process_threeway(struct isis_adjacency *adj,
struct isis_threeway_adj *tw_adj,
enum isis_adj_usage adj_usage)
@ -328,17 +298,6 @@ void isis_adj_state_change(struct isis_adjacency **padj,
if (new_state == old_state)
return;
if (old_state == ISIS_ADJ_UP &&
!CHECK_FLAG(adj->circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z)) {
if (IS_DEBUG_EVENTS)
zlog_debug(
"ISIS-Adj (%s): Starting fast-reroute on state change "
"%d->%d: %s",
circuit->area->area_tag, old_state, new_state,
reason ? reason : "unspecified");
isis_adj_route_switchover(adj);
}
adj->adj_state = new_state;
send_hello_sched(circuit, adj->level, TRIGGERED_IIH_DELAY);

View File

@ -151,4 +151,5 @@ void isis_adj_build_up_list(struct list *adjdb, struct list *list);
int isis_adj_usage2levels(enum isis_adj_usage usage);
void isis_bfd_startup_timer(struct thread *thread);
const char *isis_adj_name(const struct isis_adjacency *adj);
#endif /* ISIS_ADJACENCY_H */

View File

@ -593,27 +593,6 @@ size_t isis_circuit_pdu_size(struct isis_circuit *circuit)
return ISO_MTU(circuit);
}
static bool isis_circuit_lfa_enabled(struct isis_circuit *circuit, int level)
{
return (circuit->lfa_protection[level - 1] ||
circuit->rlfa_protection[level - 1] ||
circuit->tilfa_protection[level - 1]);
}
void isis_circuit_switchover_routes(struct isis_circuit *circuit, int family,
union g_addr *nexthop_ip, ifindex_t ifindex)
{
char is_type = circuit->area->is_type;
if ((is_type == IS_LEVEL_1 || is_type == IS_LEVEL_1_AND_2) &&
isis_circuit_lfa_enabled(circuit, IS_LEVEL_1))
isis_area_switchover_routes(circuit->area, family, nexthop_ip,
ifindex, IS_LEVEL_1);
if ((is_type == IS_LEVEL_2 || is_type == IS_LEVEL_1_AND_2) &&
isis_circuit_lfa_enabled(circuit, IS_LEVEL_2))
isis_area_switchover_routes(circuit->area, family, nexthop_ip,
ifindex, IS_LEVEL_2);
}
void isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream)
{
size_t stream_size = isis_circuit_pdu_size(circuit);
@ -1618,26 +1597,17 @@ static int isis_ifp_up(struct interface *ifp)
{
struct isis_circuit *circuit = ifp->info;
if (circuit) {
UNSET_FLAG(circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z);
if (circuit)
isis_csm_state_change(IF_UP_FROM_Z, circuit, ifp);
}
return 0;
}
static int isis_ifp_down(struct interface *ifp)
{
afi_t afi;
struct isis_circuit *circuit = ifp->info;
if (circuit &&
!CHECK_FLAG(circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z)) {
SET_FLAG(circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z);
for (afi = AFI_IP; afi <= AFI_IP6; afi++)
isis_circuit_switchover_routes(
circuit, afi == AFI_IP ? AF_INET : AF_INET6,
NULL, ifp->ifindex);
if (circuit) {
isis_csm_state_change(IF_DOWN_FROM_Z, circuit, ifp);
SET_FLAG(circuit->flags, ISIS_CIRCUIT_FLAPPED_AFTER_SPF);

View File

@ -28,7 +28,6 @@
#include "qobj.h"
#include "prefix.h"
#include "ferr.h"
#include "nexthop.h"
#include "isis_constants.h"
#include "isis_common.h"
@ -142,7 +141,6 @@ struct isis_circuit {
struct list *ipv6_non_link; /* our non-link local IPv6 addresses */
uint16_t upadjcount[ISIS_LEVELS];
#define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
#define ISIS_CIRCUIT_IF_DOWN_FROM_Z 0x02
uint8_t flags;
bool disable_threeway_adj;
struct {
@ -211,9 +209,6 @@ void isis_circuit_print_vty(struct isis_circuit *circuit, struct vty *vty,
void isis_circuit_print_json(struct isis_circuit *circuit,
struct json_object *json, char detail);
size_t isis_circuit_pdu_size(struct isis_circuit *circuit);
void isis_circuit_switchover_routes(struct isis_circuit *circuit, int family,
union g_addr *nexthop_ip,
ifindex_t ifindex);
void isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream);
void isis_circuit_af_set(struct isis_circuit *circuit, bool ip_router,

View File

@ -1836,7 +1836,7 @@ static bool clfa_loop_free_check(struct isis_spftree *spftree,
struct isis_vertex *vertex_S_D,
struct isis_spf_adj *sadj_primary,
struct isis_spf_adj *sadj_N,
uint32_t *path_metric)
uint32_t *lfa_metric)
{
struct isis_spf_node *node_N;
uint32_t dist_N_D;
@ -1882,7 +1882,7 @@ static bool clfa_loop_free_check(struct isis_spftree *spftree,
dist_N_S, dist_S_D);
if (dist_N_D < (dist_N_S + dist_S_D)) {
*path_metric = sadj_N->metric + dist_N_D;
*lfa_metric = sadj_N->metric + dist_N_D;
return true;
}
@ -2082,7 +2082,7 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
struct isis_spftree *spftree,
struct lfa_protected_resource *resource)
{
struct isis_vertex *vertex, *parent_vertex;
struct isis_vertex *vertex;
struct listnode *vnode, *snode;
int level = spftree->level;
@ -2099,7 +2099,7 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
struct isis_vertex_adj *vadj_primary;
struct isis_spf_adj *sadj_primary;
bool allow_ecmp;
uint32_t prefix_metric, best_metric = UINT32_MAX;
uint32_t best_metric = UINT32_MAX;
char buf[VID2STR_BUFFER];
if (!VTYPE_IP(vertex->type))
@ -2133,9 +2133,6 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
vadj_primary = listnode_head(vertex->Adj_N);
sadj_primary = vadj_primary->sadj;
parent_vertex = listnode_head(vertex->parents);
prefix_metric = vertex->d_N - parent_vertex->d_N;
/*
* Loop over list of SPF adjacencies and compute a list of
* preliminary LFAs.
@ -2143,7 +2140,7 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
lfa_list = list_new();
lfa_list->del = isis_vertex_adj_free;
for (ALL_LIST_ELEMENTS_RO(spftree->sadj_list, snode, sadj_N)) {
uint32_t lfa_metric, path_metric;
uint32_t lfa_metric;
struct isis_vertex_adj *lfa;
struct isis_prefix_sid *psid = NULL;
bool last_hop = false;
@ -2193,7 +2190,7 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
/* Check loop-free criterion. */
if (!clfa_loop_free_check(spftree, vertex, sadj_primary,
sadj_N, &path_metric)) {
sadj_N, &lfa_metric)) {
if (IS_DEBUG_LFA)
zlog_debug(
"ISIS-LFA: LFA condition not met for %s",
@ -2201,7 +2198,6 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
continue;
}
lfa_metric = path_metric + prefix_metric;
if (lfa_metric < best_metric)
best_metric = lfa_metric;
@ -2212,7 +2208,7 @@ void isis_lfa_compute(struct isis_area *area, struct isis_circuit *circuit,
if (vertex->N.ip.sr.present) {
psid = &vertex->N.ip.sr.sid;
if (path_metric == sadj_N->metric)
if (lfa_metric == sadj_N->metric)
last_hop = true;
}
lfa = isis_vertex_adj_add(spftree, vertex, lfa_list,

View File

@ -91,16 +91,10 @@ static struct isis_nexthop *nexthoplookup(struct list *nexthops, int family,
struct isis_nexthop *nh;
for (ALL_LIST_ELEMENTS_RO(nexthops, node, nh)) {
if (nh->ifindex != ifindex)
continue;
/* if the IP is unspecified, return the first nexthop found on
* the interface */
if (!ip)
return nh;
if (nh->family != family)
continue;
if (nh->ifindex != ifindex)
continue;
switch (family) {
case AF_INET:
@ -465,21 +459,6 @@ void isis_route_delete(struct isis_area *area, struct route_node *rode,
route_unlock_node(rode);
}
static void isis_route_remove_previous_sid(struct isis_area *area,
struct prefix *prefix,
struct isis_route_info *route_info)
{
/*
* Explicitly uninstall previous Prefix-SID label if it has
* changed or was removed.
*/
if (route_info->sr_previous.present &&
(!route_info->sr.present ||
route_info->sr_previous.label != route_info->sr.label))
isis_zebra_prefix_sid_uninstall(area, prefix, route_info,
&route_info->sr_previous);
}
static void isis_route_update(struct isis_area *area, struct prefix *prefix,
struct prefix_ipv6 *src_p,
struct isis_route_info *route_info)
@ -488,7 +467,17 @@ static void isis_route_update(struct isis_area *area, struct prefix *prefix,
if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
return;
isis_route_remove_previous_sid(area, prefix, route_info);
/*
* Explicitly uninstall previous Prefix-SID label if it has
* changed or was removed.
*/
if (route_info->sr_previous.present
&& (!route_info->sr.present
|| route_info->sr_previous.label
!= route_info->sr.label))
isis_zebra_prefix_sid_uninstall(
area, prefix, route_info,
&route_info->sr_previous);
/* Install route. */
isis_zebra_route_add_route(area->isis, prefix, src_p,
@ -735,54 +724,3 @@ void isis_route_invalidate_table(struct isis_area *area,
UNSET_FLAG(rinfo->flag, ISIS_ROUTE_FLAG_ACTIVE);
}
}
void isis_route_switchover_nexthop(struct isis_area *area,
struct route_table *table, int family,
union g_addr *nexthop_addr,
ifindex_t ifindex)
{
const char *ifname = NULL, *vrfname = NULL;
struct isis_route_info *rinfo;
struct prefix_ipv6 *src_p;
struct route_node *rnode;
vrf_id_t vrf_id;
struct prefix *prefix;
if (IS_DEBUG_EVENTS) {
if (area && area->isis) {
vrf_id = area->isis->vrf_id;
vrfname = vrf_id_to_name(vrf_id);
ifname = ifindex2ifname(ifindex, vrf_id);
}
zlog_debug("%s: initiating fast-reroute %s on VRF %s iface %s",
__func__, family2str(family), vrfname ? vrfname : "",
ifname ? ifname : "");
}
for (rnode = route_top(table); rnode;
rnode = srcdest_route_next(rnode)) {
if (!rnode->info)
continue;
rinfo = rnode->info;
if (!rinfo->backup)
continue;
if (!nexthoplookup(rinfo->nexthops, family, nexthop_addr,
ifindex))
continue;
srcdest_rnode_prefixes(rnode, (const struct prefix **)&prefix,
(const struct prefix **)&src_p);
/* Switchover route. */
isis_route_remove_previous_sid(area, prefix, rinfo);
UNSET_FLAG(rinfo->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
isis_route_update(area, prefix, src_p, rinfo->backup);
isis_route_info_delete(rinfo);
rnode->info = NULL;
route_unlock_node(rnode);
}
}

View File

@ -86,9 +86,4 @@ void isis_route_invalidate_table(struct isis_area *area,
void isis_route_node_cleanup(struct route_table *table,
struct route_node *node);
void isis_route_switchover_nexthop(struct isis_area *area,
struct route_table *table, int family,
union g_addr *nexthop_addr,
ifindex_t ifindex);
#endif /* _ZEBRA_ISIS_ROUTE_H */

View File

@ -1851,15 +1851,6 @@ void isis_spf_invalidate_routes(struct isis_spftree *tree)
tree->route_table_backup->cleanup = isis_route_node_cleanup;
}
void isis_spf_switchover_routes(struct isis_area *area,
struct isis_spftree **trees, int family,
union g_addr *nexthop_ip, ifindex_t ifindex,
int level)
{
isis_route_switchover_nexthop(area, trees[level - 1]->route_table,
family, nexthop_ip, ifindex);
}
static void isis_run_spf_cb(struct thread *thread)
{
struct isis_spf_run *run = THREAD_ARG(thread);
@ -1931,19 +1922,9 @@ void isis_spf_timer_free(void *run)
int _isis_spf_schedule(struct isis_area *area, int level,
const char *func, const char *file, int line)
{
struct isis_spftree *spftree;
time_t now;
long tree_diff, diff;
int tree;
now = monotime(NULL);
diff = 0;
for (tree = SPFTREE_IPV4; tree < SPFTREE_COUNT; tree++) {
spftree = area->spftree[tree][level - 1];
tree_diff = difftime(now - spftree->last_run_monotime, 0);
if (tree_diff != now && (diff == 0 || tree_diff < diff))
diff = tree_diff;
}
struct isis_spftree *spftree = area->spftree[SPFTREE_IPV4][level - 1];
time_t now = monotime(NULL);
int diff = now - spftree->last_run_monotime;
if (CHECK_FLAG(im->options, F_ISIS_UNIT_TEST))
return 0;
@ -1953,7 +1934,7 @@ int _isis_spf_schedule(struct isis_area *area, int level,
if (IS_DEBUG_SPF_EVENTS) {
zlog_debug(
"ISIS-SPF (%s) L%d SPF schedule called, lastrun %ld sec ago Caller: %s %s:%d",
"ISIS-SPF (%s) L%d SPF schedule called, lastrun %d sec ago Caller: %s %s:%d",
area->area_tag, level, diff, func, file, line);
}

View File

@ -60,10 +60,6 @@ struct isis_vertex *isis_spf_prefix_sid_lookup(struct isis_spftree *spftree,
void isis_spf_invalidate_routes(struct isis_spftree *tree);
void isis_spf_verify_routes(struct isis_area *area,
struct isis_spftree **trees);
void isis_spf_switchover_routes(struct isis_area *area,
struct isis_spftree **trees, int family,
union g_addr *nexthop_ip, ifindex_t ifindex,
int level);
void isis_spftree_del(struct isis_spftree *spftree);
void spftree_area_init(struct isis_area *area);
void spftree_area_del(struct isis_area *area);

View File

@ -3077,25 +3077,6 @@ void isis_area_verify_routes(struct isis_area *area)
isis_spf_verify_routes(area, area->spftree[tree]);
}
void isis_area_switchover_routes(struct isis_area *area, int family,
union g_addr *nexthop_ip, ifindex_t ifindex,
int level)
{
int tree;
/* TODO SPFTREE_DSTSRC */
if (family == AF_INET)
tree = SPFTREE_IPV4;
else if (family == AF_INET6)
tree = SPFTREE_IPV6;
else
return;
isis_spf_switchover_routes(area, area->spftree[tree], family,
nexthop_ip, ifindex, level);
}
static void area_resign_level(struct isis_area *area, int level)
{
isis_area_invalidate_routes(area, level);

View File

@ -287,9 +287,6 @@ struct isis_lsp *lsp_for_sysid(struct lspdb_head *head, const char *sysid_str,
void isis_area_invalidate_routes(struct isis_area *area, int levels);
void isis_area_verify_routes(struct isis_area *area);
void isis_area_switchover_routes(struct isis_area *area, int family,
union g_addr *nexthop_ip, ifindex_t ifindex,
int level);
void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit);
void isis_area_attached_bit_send_set(struct isis_area *area, bool attached_bit);

View File

@ -823,7 +823,7 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
----------------------------------------------------------
10.0.255.2/32 50 - rt2 implicit-null
10.0.255.2/32 40 - rt2 implicit-null
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -859,7 +859,7 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
------------------------------------------------------------
2001:db8::2/128 50 - rt2 implicit-null
2001:db8::2/128 40 - rt2 implicit-null
test# test isis topology 2 root rt4 lfa system-id rt6
IS-IS paths to level-1 routers that speak IP
@ -896,7 +896,7 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.6/32 30 - rt5 16060
10.0.255.6/32 20 - rt5 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -932,7 +932,7 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
-------------------------------------------------------
2001:db8::6/128 30 - rt5 16061
2001:db8::6/128 20 - rt5 16061
test# test isis topology 3 root rt1 lfa system-id rt2
IS-IS paths to level-1 routers that speak IP
@ -967,10 +967,10 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.2/32 30 - rt3 16020
10.0.255.4/32 40 - rt3 16040
10.0.255.5/32 50 - rt3 16050
10.0.255.6/32 50 - rt3 16060
10.0.255.2/32 20 - rt3 16020
10.0.255.4/32 30 - rt3 16040
10.0.255.5/32 40 - rt3 16050
10.0.255.6/32 40 - rt3 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1017,7 +1017,7 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.3/32 30 - rt2 16030
10.0.255.3/32 20 - rt2 16030
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1085,17 +1085,17 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------------
10.0.255.2/32 50 - rt2 implicit-null
10.0.255.3/32 60 - rt2 16030
10.0.255.4/32 70 - rt2 16040
10.0.255.5/32 60 - rt2 16050
10.0.255.6/32 70 - rt2 16060
10.0.255.7/32 80 - rt2 16070
10.0.255.8/32 70 - rt2 16080
10.0.255.9/32 80 - rt2 16090
10.0.255.10/32 90 - rt2 16100
10.0.255.11/32 80 - rt2 16110
10.0.255.12/32 90 - rt2 16120
10.0.255.2/32 40 - rt2 implicit-null
10.0.255.3/32 50 - rt2 16030
10.0.255.4/32 60 - rt2 16040
10.0.255.5/32 50 - rt2 16050
10.0.255.6/32 60 - rt2 16060
10.0.255.7/32 70 - rt2 16070
10.0.255.8/32 60 - rt2 16080
10.0.255.9/32 70 - rt2 16090
10.0.255.10/32 80 - rt2 16100
10.0.255.11/32 70 - rt2 16110
10.0.255.12/32 80 - rt2 16120
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1173,10 +1173,10 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
------------------------------------------------------
10.0.255.8/32 50 - rt10 16080
10.0.255.9/32 60 - rt10 16090
10.0.255.11/32 40 - rt10 16110
10.0.255.12/32 50 - rt10 16120
10.0.255.8/32 40 - rt10 16080
10.0.255.9/32 50 - rt10 16090
10.0.255.11/32 30 - rt10 16110
10.0.255.12/32 40 - rt10 16120
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1252,7 +1252,7 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
------------------------------------------------------
10.0.255.10/32 40 - rt7 16100
10.0.255.10/32 30 - rt7 16100
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1313,14 +1313,14 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
----------------------------------------------------------
10.0.255.1/32 130 - rt4 16010
10.0.255.2/32 120 - rt4 16020
10.0.255.4/32 110 - rt4 implicit-null
10.0.255.5/32 120 - rt4 16050
10.0.255.6/32 140 - rt4 16060
10.0.255.7/32 140 - rt4 16070
10.0.255.8/32 140 - rt4 16080
10.0.255.9/32 130 - rt4 16090
10.0.255.1/32 120 - rt4 16010
10.0.255.2/32 110 - rt4 16020
10.0.255.4/32 100 - rt4 implicit-null
10.0.255.5/32 110 - rt4 16050
10.0.255.6/32 130 - rt4 16060
10.0.255.7/32 130 - rt4 16070
10.0.255.8/32 130 - rt4 16080
10.0.255.9/32 120 - rt4 16090
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1366,14 +1366,14 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
------------------------------------------------------------
2001:db8::1/128 130 - rt4 16011
2001:db8::2/128 120 - rt4 16021
2001:db8::4/128 110 - rt4 implicit-null
2001:db8::5/128 120 - rt4 16051
2001:db8::6/128 140 - rt4 16061
2001:db8::7/128 140 - rt4 16071
2001:db8::8/128 140 - rt4 16081
2001:db8::9/128 130 - rt4 16091
2001:db8::1/128 120 - rt4 16011
2001:db8::2/128 110 - rt4 16021
2001:db8::4/128 100 - rt4 implicit-null
2001:db8::5/128 110 - rt4 16051
2001:db8::6/128 130 - rt4 16061
2001:db8::7/128 130 - rt4 16071
2001:db8::8/128 130 - rt4 16081
2001:db8::9/128 120 - rt4 16091
test# test isis topology 10 root rt8 lfa system-id rt5
IS-IS paths to level-1 routers that speak IP
@ -1414,15 +1414,15 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.1/32 90 - rt6 16010
10.0.255.1/32 80 - rt6 16010
- rt7 16010
10.0.255.2/32 100 - rt6 16020
10.0.255.2/32 90 - rt6 16020
- rt7 16020
10.0.255.3/32 70 - rt6 16030
10.0.255.3/32 60 - rt6 16030
- rt7 16030
10.0.255.4/32 70 - rt6 16040
10.0.255.4/32 60 - rt6 16040
- rt7 16040
10.0.255.5/32 110 - rt6 16050
10.0.255.5/32 100 - rt6 16050
- rt7 16050
IS-IS paths to level-1 routers that speak IPv6
@ -1463,15 +1463,15 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
-------------------------------------------------------
2001:db8::1/128 90 - rt6 16011
2001:db8::1/128 80 - rt6 16011
- rt7 16011
2001:db8::2/128 100 - rt6 16021
2001:db8::2/128 90 - rt6 16021
- rt7 16021
2001:db8::3/128 70 - rt6 16031
2001:db8::3/128 60 - rt6 16031
- rt7 16031
2001:db8::4/128 70 - rt6 16041
2001:db8::4/128 60 - rt6 16041
- rt7 16041
2001:db8::5/128 110 - rt6 16051
2001:db8::5/128 100 - rt6 16051
- rt7 16051
test# test isis topology 11 root rt3 lfa system-id rt5
@ -1511,8 +1511,8 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.5/32 40 - rt2 16050
10.0.255.6/32 40 - rt2 16060
10.0.255.5/32 30 - rt2 16050
10.0.255.6/32 30 - rt2 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1550,8 +1550,8 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
-------------------------------------------------------
2001:db8::5/128 40 - rt2 16051
2001:db8::6/128 40 - rt2 16061
2001:db8::5/128 30 - rt2 16051
2001:db8::6/128 30 - rt2 16061
test# test isis topology 13 root rt4 lfa system-id rt3
IS-IS paths to level-1 routers that speak IP
@ -1593,10 +1593,10 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
----------------------------------------------------------
10.0.255.3/32 120 - rt5 16030
10.0.255.5/32 110 - rt5 implicit-null
10.0.255.6/32 130 - rt5 16060
10.0.255.7/32 120 - rt5 16070
10.0.255.3/32 110 - rt5 16030
10.0.255.5/32 100 - rt5 implicit-null
10.0.255.6/32 120 - rt5 16060
10.0.255.7/32 110 - rt5 16070
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1699,7 +1699,7 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.2/32 30 - rt3 -
10.0.255.2/32 20 - rt3 -
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1731,7 +1731,7 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
-------------------------------------------------------
2001:db8::2/128 30 - rt3 -
2001:db8::2/128 20 - rt3 -
test# test isis topology 14 root rt5 lfa system-id rt4
IS-IS paths to level-1 routers that speak IP
@ -1765,10 +1765,10 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.1/32 70 - rt3 -
10.0.255.2/32 70 - rt3 -
10.0.255.3/32 60 - rt3 -
10.0.255.4/32 70 - rt3 -
10.0.255.1/32 60 - rt3 -
10.0.255.2/32 60 - rt3 -
10.0.255.3/32 50 - rt3 -
10.0.255.4/32 60 - rt3 -
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@ -1801,10 +1801,10 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
-------------------------------------------------------
2001:db8::1/128 70 - rt3 -
2001:db8::2/128 70 - rt3 -
2001:db8::3/128 60 - rt3 -
2001:db8::4/128 70 - rt3 -
2001:db8::1/128 60 - rt3 -
2001:db8::2/128 60 - rt3 -
2001:db8::3/128 50 - rt3 -
2001:db8::4/128 60 - rt3 -
test#
test# test isis topology 1 root rt1 remote-lfa system-id rt2
@ -2174,11 +2174,11 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
10.0.255.1/32 50 - rt3 16010
10.0.255.1/32 40 - rt3 16010
- rt6 16010
10.0.255.2/32 40 - rt3 16020
10.0.255.2/32 30 - rt3 16020
- rt6 16020
10.0.255.4/32 30 - rt3 16040
10.0.255.4/32 20 - rt3 16040
- rt6 16040
test# test isis topology 3 root rt5 remote-lfa system-id rt3 ipv4-only
@ -2535,13 +2535,13 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
--------------------------------------------------------
10.0.255.1/32 60 - rt10 16010
10.0.255.1/32 50 - rt10 16010
10.0.255.2/32 60 - rt12 50900/16020
10.0.255.3/32 70 - rt12 50900/16030
10.0.255.4/32 50 - rt10 16040
10.0.255.4/32 40 - rt10 16040
10.0.255.5/32 50 - rt12 50900/16050
10.0.255.6/32 60 - rt12 50900/16060
10.0.255.7/32 40 - rt10 16070
10.0.255.7/32 30 - rt10 16070
10.0.255.8/32 40 - rt12 50900/16080
test# test isis topology 7 root rt6 remote-lfa system-id rt5 ipv4-only
@ -2671,13 +2671,13 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
------------------------------------------------------
10.0.255.1/32 80 - rt9 16010
10.0.255.4/32 70 - rt9 16040
10.0.255.5/32 60 - rt9 16050
10.0.255.7/32 60 - rt9 16070
10.0.255.8/32 50 - rt9 16080
10.0.255.10/32 70 - rt9 16100
10.0.255.11/32 60 - rt9 16110
10.0.255.1/32 70 - rt9 16010
10.0.255.4/32 60 - rt9 16040
10.0.255.5/32 50 - rt9 16050
10.0.255.7/32 50 - rt9 16070
10.0.255.8/32 40 - rt9 16080
10.0.255.10/32 60 - rt9 16100
10.0.255.11/32 50 - rt9 16110
test# test isis topology 8 root rt2 remote-lfa system-id rt5 ipv4-only
P-space (self):
@ -2863,14 +2863,14 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
----------------------------------------------------------
10.0.255.1/32 60 - rt1 implicit-null
10.0.255.1/32 50 - rt1 implicit-null
- rt3 16010
10.0.255.3/32 60 - rt1 16030
10.0.255.3/32 50 - rt1 16030
- rt3 implicit-null
10.0.255.4/32 80 - rt3 50500/16040
10.0.255.5/32 70 - rt1 16050
10.0.255.5/32 60 - rt1 16050
- rt3 16050
10.0.255.6/32 80 - rt3 16060
10.0.255.6/32 70 - rt3 16060
P-space (self):
@ -2941,14 +2941,14 @@ IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s)
------------------------------------------------------------
2001:db8::1/128 60 - rt1 implicit-null
2001:db8::1/128 50 - rt1 implicit-null
- rt3 16011
2001:db8::3/128 60 - rt1 16031
2001:db8::3/128 50 - rt1 16031
- rt3 implicit-null
2001:db8::4/128 80 - rt3 50500/16041
2001:db8::5/128 70 - rt1 16051
2001:db8::5/128 60 - rt1 16051
- rt3 16051
2001:db8::6/128 80 - rt3 16061
2001:db8::6/128 70 - rt3 16061
test# test isis topology 13 root rt1 remote-lfa system-id rt3 ipv4-only
P-space (self):

View File

@ -1,6 +0,0 @@
hostname rt1
!
bfd
peer 2001:db8:1000::2 multihop local-address 2001:db8:1000::1
!
!

View File

@ -1,50 +0,0 @@
--- a/rt1/step14/show_ipv6_route.ref
+++ b/rt1/step15/show_ipv6_route.ref
@@ -6,22 +6,12 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":25,
"installed":true,
"nexthops":[
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
"interfaceName":"eth-rt3",
"active":true
}
@@ -151,22 +141,12 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":25,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
"interfaceName":"eth-rt6",
"active":true
}

View File

@ -1,53 +0,0 @@
--- a/rt1/step15/show_ipv6_route.ref
+++ b/rt1/step16/show_ipv6_route.ref
@@ -32,16 +32,6 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt3",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt2",
"active":true
}
]
@@ -90,16 +80,6 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt2",
"active":true
}
]
@@ -119,16 +99,6 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt6",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt2",
"active":true
}
]

View File

@ -1,6 +0,0 @@
hostname rt2
!
bfd
peer 2001:db8:1000::1 multihop local-address 2001:db8:1000::2
!
!

View File

@ -55,7 +55,6 @@ import os
import sys
import pytest
import json
import time
import tempfile
from functools import partial
@ -129,7 +128,7 @@ def build_topo(tgen):
files = ["show_ipv6_route.ref", "show_yang_interface_isis_adjacencies.ref"]
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "rt7"]:
outputs[rname] = {}
for step in range(1, 16 + 1):
for step in range(1, 13 + 1):
outputs[rname][step] = {}
for file in files:
if step == 1:
@ -175,9 +174,6 @@ def setup_module(mod):
router.load_config(
TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
)
router.load_config(
TopoRouter.RD_BFD, os.path.join(CWD, "/dev/null".format(rname))
)
tgen.start_router()
@ -190,7 +186,7 @@ def teardown_module(mod):
tgen.stop_topology()
def router_compare_json_output(rname, command, reference, wait=0.5, count=120):
def router_compare_json_output(rname, command, reference):
"Compare router JSON output"
logger.info('Comparing router "%s" "%s" output', rname, command)
@ -200,7 +196,7 @@ def router_compare_json_output(rname, command, reference, wait=0.5, count=120):
# Run test function until we get an result. Wait at most 60 seconds.
test_func = partial(topotest.router_json_cmp, tgen.gears[rname], command, expected)
_, diff = topotest.run_and_expect(test_func, None, count=count, wait=wait)
_, diff = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assertmsg = '"{}" JSON output mismatches the expected result'.format(rname)
assert diff is None, assertmsg
@ -620,394 +616,6 @@ def test_rib_ipv6_step13():
)
#
# Step 14
#
# Action(s):
# - Setting spf-delay-ietf init-delay of 15s
#
# Expected changes:
# - No routing table change
# - At the end of test, SPF reacts to a failure in 15s
#
def test_rib_ipv6_step14():
logger.info("Test (step 14): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Setting spf-delay-ietf init-delay of 15s")
tgen.net["rt1"].cmd(
'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 15000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
)
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][14]["show_ipv6_route.ref"],
)
#
# Step 15
#
# Action(s):
# - shut the eth-rt2 interface on rt1
#
# Expected changes:
# - Route switchover of routes via eth-rt2
#
def test_rib_ipv6_step15():
logger.info("Test (step 15): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Shut the interface to rt2 from the switch side and check fast-reroute")
tgen.net.cmd_raises("ip link set %s down" % tgen.net["s1"].intfs[0])
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][15]["show_ipv6_route.ref"],
count=2,
wait=0.05,
)
#
# Step 16
#
# Action(s): wait for the convergence and SPF computation on rt1
#
# Expected changes:
# - convergence of IPv6 RIB
#
def test_rib_ipv6_step16():
logger.info("Test (step 16): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Check SPF convergence")
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][16]["show_ipv6_route.ref"],
)
#
# Step 17
#
# Action(s):
# - Setting spf-delay-ietf init-delay of 15s
#
# Expected changes:
# - No routing table change
# - At the end of test, SPF reacts to a failure in 15s
#
def test_rib_ipv6_step17():
logger.info("Test (step 17): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info(
"Unshut the interface to rt2 from the switch side and check fast-reroute"
)
tgen.net.cmd_raises("ip link set %s up" % tgen.net["s1"].intfs[0])
logger.info("Unset link-detect on rt1 eth-rt2")
# Unset link detection. We want zebra to consider linkdow as operationaly up
# in order that BFD triggers LFA instead of the interface down
tgen.net["rt1"].cmd('vtysh -c "conf t" -c "int eth-rt2" -c "no link-detect"')
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][14]["show_ipv6_route.ref"],
)
#
# Step 18
#
# Action(s):
# - shut the eth-rt2 interface on rt1
#
# Expected changes:
# - Route switchover of routes via eth-rt2
#
def test_rib_ipv6_step18():
logger.info("Test (step 18): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Shut the interface to rt2 from the switch side and check fast-reroute")
tgen.net.cmd_raises("ip link set %s down" % tgen.net["s1"].intfs[0])
rname = "rt1"
retry = 200 + 1
while retry:
retry -= 1
output = tgen.gears[rname].vtysh_cmd("show isis neighbor json")
output_json = json.loads(output)
found = False
for neighbor in output_json["areas"][0]["circuits"]:
if "adj" in neighbor and neighbor["adj"] == "rt2":
found = True
break
if not found:
break
time.sleep(0.05)
assert not found, "rt2 neighbor is still present"
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][15]["show_ipv6_route.ref"],
count=2,
wait=0.05,
)
#
# Step 19
#
# Action(s): wait for the convergence and SPF computation on rt1
#
# Expected changes:
# - convergence of IPv6 RIB
#
def test_rib_ipv6_step19():
logger.info("Test (step 19): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Check SPF convergence")
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][16]["show_ipv6_route.ref"],
)
#
# Step 20
#
# Action(s):
# - Setting spf-delay-ietf init-delay of 15s
#
# Expected changes:
# - No routing table change
# - At the end of test, SPF reacts to a failure in 15s
#
def test_rib_ipv6_step20():
logger.info("Test (step 20): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info(
"Unshut the interface to rt2 from the switch side and check fast-reroute"
)
tgen.net.cmd_raises("ip link set %s up" % tgen.net["s1"].intfs[0])
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][14]["show_ipv6_route.ref"],
)
#
# Step 21
#
# Action(s):
# - shut the eth-rt2 interface on rt1
#
# Expected changes:
# - Route switchover of routes via eth-rt2
#
def test_rib_ipv6_step21():
logger.info("Test (step 21): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
rname = "rt1"
logger.info("Shut the interface to rt2 from the switch side and check fast-reroute")
tgen.gears[rname].vtysh_cmd("clear isis neighbor rt2")
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][15]["show_ipv6_route.ref"],
count=2,
wait=0.05,
)
#
# Step 22
#
# Action(s): wait for the convergence and SPF computation on rt1
#
# Expected changes:
# - convergence of IPv6 RIB
#
def test_rib_ipv6_step22():
logger.info("Test (step 22): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Check SPF convergence")
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][16]["show_ipv6_route.ref"],
)
#
# Step 23
#
# Action(s):
# - Setting spf-delay-ietf init-delay of 15s
#
# Expected changes:
# - No routing table change
# - At the end of test, SPF reacts to a failure in 15s
#
def test_rib_ipv6_step23():
logger.info("Test (step 23): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Setup BFD on rt1 and rt2")
for rname in ["rt1", "rt2"]:
conf_file = os.path.join(CWD, "{}/bfdd.conf".format(rname))
tgen.net[rname].cmd("vtysh -f {}".format(conf_file))
rname = "rt1"
expect = '[{"multihop":true,"peer":"2001:db8:1000::2","local":"2001:db8:1000::1","status":"up"}]'
router_compare_json_output(rname, "show bfd peers json", expect)
logger.info("Set ISIS BFD")
tgen.net["rt1"].cmd('vtysh -c "conf t" -c "int eth-rt2" -c "isis bfd"')
tgen.net["rt2"].cmd('vtysh -c "conf t" -c "int eth-rt1" -c "isis bfd"')
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][14]["show_ipv6_route.ref"],
)
#
# Step 24
#
# Action(s):
# - shut the eth-rt2 interface on rt1
#
# Expected changes:
# - Route switchover of routes via eth-rt2
#
def test_rib_ipv6_step24():
logger.info("Test (step 24): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Shut the interface to rt2 from the switch side and check fast-reroute")
tgen.net.cmd_raises("ip link set %s down" % tgen.net["s1"].intfs[0])
rname = "rt1"
expect = '[{"multihop":true,"peer":"2001:db8:1000::2","local":"2001:db8:1000::1","status":"down"}]'
router_compare_json_output(
rname,
"show bfd peers json",
expect,
count=20,
wait=0.05,
)
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][15]["show_ipv6_route.ref"],
count=2,
wait=0.05,
)
#
# Step 25
#
# Action(s): wait for the convergence and SPF computation on rt1
#
# Expected changes:
# - convergence of IPv6 RIB
#
def test_rib_ipv6_step25():
logger.info("Test (step 25): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Check SPF convergence")
for rname in ["rt1"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][16]["show_ipv6_route.ref"],
)
# Memory leak test template
def test_memory_leak():
"Run the memory leak test and report results."

View File

@ -1,19 +0,0 @@
--- a/rt1/step11/show_ip_route.ref
+++ b/rt1/step12/show_ip_route.ref
@@ -110,16 +110,6 @@
"labels":[
16060
]
- },
- {
- "fib":true,
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
- 16060
- ]
}
]
}

View File

@ -1,18 +0,0 @@
--- a/rt1/step11/show_ipv6_route.ref
+++ b/rt1/step12/show_ipv6_route.ref
@@ -105,15 +105,6 @@
"labels":[
16061
]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
- 16061
- ]
}
]
}

View File

@ -1,28 +0,0 @@
--- a/rt1/step11/show_mpls_table.ref
+++ b/rt1/step12/show_mpls_table.ref
@@ -79,12 +79,6 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.1.3"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16060,
- "installed":true,
"nexthop":"10.0.1.2"
}
]
@@ -96,12 +90,6 @@
{
"type":"SR (IS-IS)",
"outLabel":16061,
- "installed":true,
- "interface":"eth-sw1"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16061,
"installed":true,
"interface":"eth-sw1"
}

View File

@ -1,20 +0,0 @@
--- a/rt2/step11/show_mpls_table.ref
+++ b/rt2/step12/show_mpls_table.ref
@@ -199,7 +199,7 @@
"backupNexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16060,
+ "outLabel":16500,
"nexthop":"10.0.1.3"
}
]
@@ -230,7 +230,7 @@
"backupNexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16061,
+ "outLabel":16501,
"interface":"eth-sw1"
}
]

View File

@ -1,58 +0,0 @@
--- a/rt3/step11/show_ip_route.ref
+++ b/rt3/step12/show_ip_route.ref
@@ -198,44 +198,37 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":30,
+ "metric":40,
"installed":true,
"nexthops":[
{
"fib":true,
- "ip":"10.0.4.5",
+ "ip":"10.0.1.2",
"afi":"ipv4",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-sw1",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
- 30060
+ 16060
]
},
{
"fib":true,
- "ip":"10.0.5.5",
+ "ip":"10.0.4.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
30060
]
- }
- ],
- "backupNexthops":[
+ },
{
- "ip":"10.0.1.2",
+ "fib":true,
+ "ip":"10.0.5.5",
"afi":"ipv4",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
- 16060
+ 30060
]
}
]

View File

@ -1,45 +0,0 @@
--- a/rt3/step11/show_ipv6_route.ref
+++ b/rt3/step12/show_ipv6_route.ref
@@ -186,7 +186,7 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":30,
+ "metric":40,
"installed":true,
"nexthops":[
{
@@ -194,9 +194,6 @@
"afi":"ipv6",
"interfaceName":"eth-rt5-1",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
30061
]
@@ -206,23 +203,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt5-2",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
30061
]
}
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
- 16061
- ]
- }
]
}
]

View File

@ -1,60 +0,0 @@
--- a/rt3/step11/show_mpls_table.ref
+++ b/rt3/step12/show_mpls_table.ref
@@ -165,27 +165,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":30060,
- "installed":true,
- "nexthop":"10.0.5.5",
- "backupIndex":[
- 0
- ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":30060,
- "installed":true,
- "nexthop":"10.0.4.5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16060,
+ "installed":true,
"nexthop":"10.0.1.2"
}
]
@@ -196,27 +177,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":30061,
- "installed":true,
- "interface":"eth-rt5-2",
- "backupIndex":[
- 0
- ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":30061,
- "installed":true,
- "interface":"eth-rt5-1",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16061,
+ "installed":true,
"interface":"eth-sw1"
}
]

View File

@ -1,144 +0,0 @@
--- a/rt4/step11/show_ip_route.ref
+++ b/rt4/step12/show_ip_route.ref
@@ -160,23 +160,13 @@
"interfaceName":"eth-rt5",
"active":true,
"backupIndex":[
- 0
+ 0,
+ 1
],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 16500
- ]
- }
]
}
],
@@ -196,24 +186,10 @@
"afi":"ipv4",
"interfaceName":"eth-rt6",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30060
- ]
- }
]
}
],
@@ -352,19 +328,12 @@
"active":true,
"backupIndex":[
0,
- 1,
- 2
+ 1
]
}
],
"backupNexthops":[
{
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- },
- {
"ip":"10.0.2.2",
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
@@ -397,19 +366,12 @@
"active":true,
"backupIndex":[
0,
- 1,
- 2
+ 1
]
}
],
"backupNexthops":[
{
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- },
- {
"ip":"10.0.2.2",
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
@@ -439,14 +401,6 @@
0
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- }
]
}
],
@@ -460,18 +414,7 @@
{
"ip":"10.0.7.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true
+ "interfaceName":"eth-rt6"
}
]
}
@@ -492,13 +435,6 @@
"afi":"ipv4",
"interfaceName":"eth-rt5",
"active":true
- },
- {
- "fib":true,
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
}
]
}

View File

@ -1,50 +0,0 @@
--- a/rt4/step11/show_ipv6_route.ref
+++ b/rt4/step12/show_ipv6_route.ref
@@ -149,23 +149,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt5",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 16501
- ]
- }
]
}
],
@@ -184,23 +171,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt6",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30061
- ]
- }
]
}
]

View File

@ -1,78 +0,0 @@
--- a/rt4/step11/show_mpls_table.ref
+++ b/rt4/step12/show_mpls_table.ref
@@ -179,17 +179,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.7.6",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":30060,
- "nexthop":"10.0.6.5"
+ "nexthop":"10.0.7.6"
}
]
},
@@ -201,17 +191,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt6",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":30061,
- "interface":"eth-rt5"
+ "interface":"eth-rt6"
}
]
},
@@ -223,17 +203,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.6.5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16500,
- "nexthop":"10.0.7.6"
+ "nexthop":"10.0.6.5"
}
]
},
@@ -245,17 +215,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16501,
- "interface":"eth-rt6"
+ "interface":"eth-rt5"
}
]
}

View File

@ -1,14 +0,0 @@
hostname rt5
!
#debug bfd network
#debug bfd peer
#debug bfd zebra
!
bfd
peer 10.0.8.6 interface eth-rt6
detect-multiplier 3
receive-interval 300
transmit-interval 300
no shutdown
!
!

View File

@ -1,151 +0,0 @@
--- a/rt5/step11/show_ip_route.ref
+++ b/rt5/step12/show_ip_route.ref
@@ -159,24 +159,10 @@
"afi":"ipv4",
"interfaceName":"eth-rt4",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 16040
- ]
- }
]
}
],
@@ -187,25 +173,11 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true,
- "backupIndex":[
- 0
- ],
- "labels":[
- 3
- ]
- }
- ],
- "backupNexthops":[
- {
"ip":"10.0.6.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
@@ -276,19 +248,12 @@
"active":true,
"backupIndex":[
0,
- 1,
- 2
+ 1
]
}
],
"backupNexthops":[
{
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- },
- {
"ip":"10.0.4.3",
"afi":"ipv4",
"interfaceName":"eth-rt3-1",
@@ -321,19 +286,12 @@
"active":true,
"backupIndex":[
0,
- 1,
- 2
+ 1
]
}
],
"backupNexthops":[
{
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- },
- {
"ip":"10.0.4.3",
"afi":"ipv4",
"interfaceName":"eth-rt3-1",
@@ -439,14 +397,6 @@
0
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- }
]
}
],
@@ -465,39 +415,6 @@
"ip":"10.0.6.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true
- },
- {
- "fib":true,
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true
- }
- ]
- }
- ],
- "10.0.8.0\/24":[
- {
- "prefix":"10.0.8.0\/24",
- "protocol":"isis",
- "distance":115,
- "metric":20,
- "nexthops":[
- {
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
"active":true
}
]

View File

@ -1,53 +0,0 @@
--- a/rt5/step11/show_ipv6_route.ref
+++ b/rt5/step12/show_ipv6_route.ref
@@ -149,23 +149,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt4",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 16041
- ]
- }
]
}
],
@@ -176,25 +163,12 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt6",
- "active":true,
- "backupIndex":[
- 0
- ],
- "labels":[
- 3
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
"interfaceName":"eth-rt4",
"active":true,
"labels":[

View File

@ -1,80 +0,0 @@
--- a/rt5/step11/show_mpls_table.ref
+++ b/rt5/step12/show_mpls_table.ref
@@ -179,17 +179,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.6.4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16040,
- "nexthop":"10.0.8.6"
+ "nexthop":"10.0.6.4"
}
]
},
@@ -201,17 +191,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16041,
- "interface":"eth-rt6"
+ "interface":"eth-rt4"
}
]
},
@@ -221,18 +201,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
- "nexthop":"10.0.8.6",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16060,
+ "installed":true,
"nexthop":"10.0.6.4"
}
]
@@ -243,18 +213,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
- "interface":"eth-rt6",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16061,
+ "installed":true,
"interface":"eth-rt4"
}
]

View File

@ -1,14 +0,0 @@
hostname rt6
!
#debug bfd network
#debug bfd peer
#debug bfd zebra
!
bfd
peer 10.0.8.5 interface eth-rt5
detect-multiplier 3
receive-interval 300
transmit-interval 300
no shutdown
!
!

View File

@ -1,125 +0,0 @@
--- a/rt6/step10/show_ip_route.ref
+++ b/rt6/step11/show_ip_route.ref
@@ -76,25 +76,11 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":30,
+ "metric":40,
"installed":true,
"nexthops":[
{
"fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ],
- "labels":[
- 30030
- ]
- }
- ],
- "backupNexthops":[
- {
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
@@ -150,25 +136,11 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ],
- "labels":[
- 3
- ]
- }
- ],
- "backupNexthops":[
- {
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
@@ -276,22 +248,11 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
@@ -307,22 +268,11 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
@@ -389,19 +339,9 @@
"prefix":"10.0.8.0\/24",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",

View File

@ -1,56 +0,0 @@
--- a/rt6/step10/show_ipv6_route.ref
+++ b/rt6/step11/show_ipv6_route.ref
@@ -72,25 +72,12 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":30,
+ "metric":40,
"installed":true,
"nexthops":[
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ],
- "labels":[
- 30031
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
"interfaceName":"eth-rt4",
"active":true,
"labels":[
@@ -142,25 +129,12 @@
"selected":true,
"destSelected":true,
"distance":115,
- "metric":20,
+ "metric":30,
"installed":true,
"nexthops":[
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
- 0
- ],
- "labels":[
- 3
- ]
- }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
"interfaceName":"eth-rt4",
"active":true,
"labels":[

View File

@ -1,106 +0,0 @@
--- a/rt6/step10/show_mpls_table.ref
+++ b/rt6/step11/show_mpls_table.ref
@@ -8,12 +8,6 @@
"outLabel":16010,
"installed":true,
"nexthop":"10.0.7.4"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":30010,
- "installed":true,
- "nexthop":"10.0.8.5"
}
]
},
@@ -26,12 +20,6 @@
"outLabel":16011,
"installed":true,
"interface":"eth-rt4"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":30011,
- "installed":true,
- "interface":"eth-rt5"
}
]
},
@@ -85,18 +73,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":30030,
- "installed":true,
- "nexthop":"10.0.8.5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16030,
+ "installed":true,
"nexthop":"10.0.7.4"
}
]
@@ -107,17 +85,6 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":30031,
- "installed":true,
- "interface":"eth-rt5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16031,
"interface":"eth-rt4"
}
@@ -173,18 +140,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
- "nexthop":"10.0.8.5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16500,
+ "installed":true,
"nexthop":"10.0.7.4"
}
]
@@ -195,18 +152,8 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
- "interface":"eth-rt5",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
"outLabel":16501,
+ "installed":true,
"interface":"eth-rt4"
}
]

View File

@ -1,153 +0,0 @@
--- a/rt6/step12/show_ip_route.ref
+++ b/rt6/step12/show_ip_route.ref
@@ -18,16 +18,6 @@
"labels":[
16010
]
- },
- {
- "fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30010
- ]
}
]
}
@@ -48,24 +38,10 @@
"afi":"ipv4",
"interfaceName":"eth-rt4",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
16020
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30020
- ]
- }
]
}
],
@@ -108,24 +84,10 @@
"afi":"ipv4",
"interfaceName":"eth-rt4",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30040
- ]
- }
]
}
],
@@ -168,13 +130,6 @@
"afi":"ipv4",
"interfaceName":"eth-rt4",
"active":true
- },
- {
- "fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true
}
]
}
@@ -194,17 +149,6 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
"active":true
}
]
@@ -225,17 +169,6 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
"active":true
}
]
@@ -297,13 +230,6 @@
"afi":"ipv4",
"interfaceName":"eth-rt4",
"active":true
- },
- {
- "fib":true,
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true
}
]
}
@@ -318,18 +244,7 @@
{
"ip":"10.0.7.4",
"afi":"ipv4",
- "interfaceName":"eth-rt4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true
+ "interfaceName":"eth-rt4"
}
]
}

View File

@ -1,66 +0,0 @@
--- a/rt6/step12/show_ipv6_route.ref
+++ b/rt6/step12/show_ipv6_route.ref
@@ -17,15 +17,6 @@
"labels":[
16011
]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30011
- ]
}
]
}
@@ -45,23 +36,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt4",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
16021
]
}
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30021
- ]
- }
]
}
],
@@ -102,23 +80,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt4",
"active":true,
- "backupIndex":[
- 0
- ],
"labels":[
3
]
}
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 30041
- ]
- }
]
}
],

View File

@ -1,78 +0,0 @@
--- a/rt6/step12/show_mpls_table.ref
+++ b/rt6/step12/show_mpls_table.ref
@@ -31,17 +31,7 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.7.4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":30020,
- "nexthop":"10.0.8.5"
+ "nexthop":"10.0.7.4"
}
]
},
@@ -53,17 +43,7 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":30021,
- "interface":"eth-rt5"
+ "interface":"eth-rt4"
}
]
},
@@ -98,17 +78,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.7.4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":30040,
- "nexthop":"10.0.8.5"
+ "nexthop":"10.0.7.4"
}
]
},
@@ -120,17 +90,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt4",
- "backupIndex":[
- 0
- ]
- }
- ],
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":30041,
- "interface":"eth-rt5"
+ "interface":"eth-rt4"
}
]
},

View File

@ -144,7 +144,7 @@ def build_topo(tgen):
]
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
outputs[rname] = {}
for step in range(1, 12 + 1):
for step in range(1, 9 + 1):
outputs[rname][step] = {}
for file in files:
if step == 1:
@ -188,9 +188,6 @@ def setup_module(mod):
router.load_config(
TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
)
router.load_config(
TopoRouter.RD_BFD, os.path.join(CWD, "/dev/null".format(rname))
)
tgen.start_router()
@ -203,7 +200,7 @@ def teardown_module(mod):
tgen.stop_topology()
def router_compare_json_output(rname, command, reference, count=120, wait=0.5):
def router_compare_json_output(rname, command, reference):
"Compare router JSON output"
logger.info('Comparing router "%s" "%s" output', rname, command)
@ -213,7 +210,7 @@ def router_compare_json_output(rname, command, reference, count=120, wait=0.5):
# Run test function until we get an result. Wait at most 60 seconds.
test_func = partial(topotest.router_json_cmp, tgen.gears[rname], command, expected)
_, diff = topotest.run_and_expect(test_func, None, count=count, wait=wait)
_, diff = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assertmsg = '"{}" JSON output mismatches the expected result'.format(rname)
assert diff is None, assertmsg
@ -743,367 +740,6 @@ def test_mpls_lib_step9():
)
#
# Step 10
#
# Action(s):
# - Setting spf-delay-ietf init-delay of 15s
#
# Expected changes:
# - No routing table change
# - At the end of test, SPF reacts to a failure in 15s
#
def test_rib_ipv4_step10():
logger.info("Test (step 10): verify IPv4 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Setting spf-delay-ietf init-delay of 15s")
tgen.net["rt6"].cmd(
'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 15000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname, "show ip route isis json", outputs[rname][10]["show_ip_route.ref"]
)
def test_rib_ipv6_step10():
logger.info("Test (step 10): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][10]["show_ipv6_route.ref"],
)
def test_mpls_lib_step10():
logger.info("Test (step 10): verify MPLS LIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname, "show mpls table json", outputs[rname][10]["show_mpls_table.ref"]
)
#
# Step 11
#
# Action(s):
# - shut the eth-rt5 interface on rt6
#
# Expected changes:
# - Route switchover of routes via eth-rt5
#
def test_rt6_step11():
logger.info(
"Test (step 11): Check IPv4/6 RIB and MPLS table after a LFA switchover"
)
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info(
"Shut a rt6 interface to rt5 from the switch side and check fast-reroute"
)
tgen.net.cmd_raises("ip link set %s down" % tgen.net["s8"].intfs[1])
rname = "rt6"
router_compare_json_output(
rname,
"show ip route isis json",
outputs[rname][11]["show_ip_route.ref"],
count=1,
)
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][11]["show_ipv6_route.ref"],
count=1,
)
router_compare_json_output(
rname,
"show mpls table json",
outputs[rname][11]["show_mpls_table.ref"],
count=1,
)
#
# Step 12
#
# Action(s): wait for the convergence and SPF computation on rt6
#
# Expected changes:
# - convergence of IPv4/6 RIB and MPLS table
#
def test_rib_ipv4_step12():
logger.info("Test (step 12): verify IPv4 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Check SPF convergence")
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show ip route isis json",
outputs[rname][12]["show_ip_route.ref"],
)
def test_rib_ipv6_step12():
logger.info("Test (step 12): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][12]["show_ipv6_route.ref"],
)
def test_mpls_lib_step12():
logger.info("Test (step 12): verify MPLS LIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show mpls table json",
outputs[rname][12]["show_mpls_table.ref"],
)
#
# Step 13
#
# Action(s):
# - shut / unshut a rt6 interface
# - Setup BFD
#
# Expected changes:
# - All route tables go back to previous state situation
# - At the end of test, next SPF is scheduled in approximatively 15s
#
def test_rib_ipv4_step13():
logger.info("Test (step 13): verify IPv4 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Unsetting spf-delay-ietf init-delay of 15s")
tgen.net["rt6"].cmd('vtysh -c "conf t" -c "router isis 1" -c "no spf-delay-ietf"')
logger.info(
"Unshut the rt6 interface to rt5 from the switch side and check fast-reroute"
)
tgen.net.cmd_raises("ip link set %s up" % tgen.net["s8"].intfs[1])
logger.info("Setup BFD on rt5 and rt6")
for rname in ["rt5", "rt6"]:
conf_file = os.path.join(CWD, "{}/bfdd.conf".format(rname))
tgen.net[rname].cmd("vtysh -f {}".format(conf_file))
expect = (
'[{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"up"}]'
)
router_compare_json_output("rt6", "show bfd peers json", expect)
logger.info("Unset link-detect on rt6 eth-rt5")
# Unset link detection. We want zebra to consider linkdow as operationaly up
# in order that BFD triggers LFA instead of the interface down
tgen.net["rt6"].cmd('vtysh -c "conf t" -c "int eth-rt5" -c "no link-detect"')
# reset spf-interval
logger.info("Shut/unshut a rt6 eth-rt5 interface and set spf-interval to 15s")
tgen.net["rt6"].cmd(
'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 15000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname, "show ip route isis json", outputs[rname][10]["show_ip_route.ref"]
)
logger.info("Set ISIS BFD")
tgen.net["rt5"].cmd('vtysh -c "conf t" -c "int eth-rt6" -c "isis bfd"')
tgen.net["rt6"].cmd('vtysh -c "conf t" -c "int eth-rt5" -c "isis bfd"')
def test_rib_ipv6_step13():
logger.info("Test (step 13): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][10]["show_ipv6_route.ref"],
)
def test_mpls_lib_step13():
logger.info("Test (step 13): verify MPLS LIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname, "show mpls table json", outputs[rname][10]["show_mpls_table.ref"]
)
#
# Step 14
#
# Action(s):
# - shut the eth-rt5 interface on rt6
#
# Expected changes:
# - Route switchover of routes via eth-rt5
#
def test_rt6_step14():
logger.info("Test (step 14): verify IPv4/6 RIB and MPLS table")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info(
"Shut a rt6 interface to rt5 from the switch side and check fast-reroute"
)
tgen.net.cmd_raises("ip link set %s down" % tgen.net["s8"].intfs[1])
rname = "rt6"
expect = (
'[{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"down"}]'
)
router_compare_json_output(
rname,
"show bfd peers json",
expect,
count=20,
wait=0.05,
)
router_compare_json_output(
rname,
"show ip route isis json",
outputs[rname][11]["show_ip_route.ref"],
count=1,
)
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][11]["show_ipv6_route.ref"],
count=1,
)
router_compare_json_output(
rname,
"show mpls table json",
outputs[rname][11]["show_mpls_table.ref"],
count=1,
)
#
# Step 15
#
# Action(s): wait for the convergence and SPF computation on rt6
#
# Expected changes:
# - convergence of IPv4/6 RIB and MPLS table
#
def test_rib_ipv4_step15():
logger.info("Test (step 15): verify IPv4 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Check SPF convergence")
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show ip route isis json",
outputs[rname][12]["show_ip_route.ref"],
)
def test_rib_ipv6_step15():
logger.info("Test (step 15): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
outputs[rname][12]["show_ipv6_route.ref"],
)
def test_mpls_lib_step15():
logger.info("Test (step 15): verify MPLS LIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
rname,
"show mpls table json",
outputs[rname][12]["show_mpls_table.ref"],
)
# Memory leak test template
def test_memory_leak():
"Run the memory leak test and report results."