summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2021-05-20 09:00:46 -0400
committerGitHub <noreply@github.com>2021-05-20 09:00:46 -0400
commit21967e4e820b51a9a3f35efd0794b9601d182569 (patch)
tree0e92be2873c40f5444817942cbf064ed2362ca7b
parent91895b15a9a11f2b5d156f2ccf904f82c385b9cd (diff)
parent5cfffcdd8dc6dfac0f0ffa444dcbcebaa8d7d58f (diff)
Merge pull request #8628 from idryzhov/isis-vrf-redist
isisd: fix redistribution in vrf
-rw-r--r--isisd/isis_main.c3
-rw-r--r--isisd/isis_nb_config.c2
-rw-r--r--isisd/isis_redist.c32
-rw-r--r--isisd/isis_redist.h2
-rw-r--r--isisd/isis_zebra.c24
-rw-r--r--isisd/isis_zebra.h5
-rw-r--r--isisd/isisd.c93
-rw-r--r--tests/isisd/test_isis_spf.c6
-rw-r--r--tests/topotests/isis_topo1_vrf/r1/r1_route.json2
-rw-r--r--tests/topotests/isis_topo1_vrf/r1/r1_route6.json2
-rw-r--r--tests/topotests/isis_topo1_vrf/r1/r1_topology.json6
-rw-r--r--tests/topotests/isis_topo1_vrf/r2/r2_route.json2
-rw-r--r--tests/topotests/isis_topo1_vrf/r2/r2_route6.json2
-rw-r--r--tests/topotests/isis_topo1_vrf/r2/r2_topology.json6
-rw-r--r--tests/topotests/isis_topo1_vrf/r3/r3_route.json6
-rw-r--r--tests/topotests/isis_topo1_vrf/r3/r3_route6.json4
-rw-r--r--tests/topotests/isis_topo1_vrf/r3/r3_topology.json12
-rw-r--r--tests/topotests/isis_topo1_vrf/r4/r4_route.json2
-rw-r--r--tests/topotests/isis_topo1_vrf/r4/r4_route6.json4
-rw-r--r--tests/topotests/isis_topo1_vrf/r4/r4_topology.json12
-rw-r--r--tests/topotests/isis_topo1_vrf/r5/r5_route.json2
-rw-r--r--tests/topotests/isis_topo1_vrf/r5/r5_route6.json4
-rw-r--r--tests/topotests/isis_topo1_vrf/r5/r5_topology.json12
23 files changed, 166 insertions, 79 deletions
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index c93bbb83af..acfa1a29d4 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -265,9 +265,6 @@ int main(int argc, char **argv, char **envp)
lsp_init();
mt_init();
- /* create the global 'isis' instance */
- isis_global_instance_create(VRF_DEFAULT_NAME);
-
isis_zebra_init(master, instance);
isis_bfd_init(master);
isis_ldp_sync_init();
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c
index 68a4581a46..a00c86eeaf 100644
--- a/isisd/isis_nb_config.c
+++ b/isisd/isis_nb_config.c
@@ -68,7 +68,7 @@ int isis_instance_create(struct nb_cb_create_args *args)
return NB_OK;
vrf_name = yang_dnode_get_string(args->dnode, "./vrf");
area_tag = yang_dnode_get_string(args->dnode, "./area-tag");
- isis_global_instance_create(vrf_name);
+
area = isis_area_lookup_by_vrf(area_tag, vrf_name);
if (area)
return NB_ERR_INCONSISTENCY;
diff --git a/isisd/isis_redist.c b/isisd/isis_redist.c
index c33d56e625..2f5e490da1 100644
--- a/isisd/isis_redist.c
+++ b/isisd/isis_redist.c
@@ -56,7 +56,7 @@ static int redist_protocol(int family)
return 0;
}
-static afi_t afi_for_redist_protocol(int protocol)
+afi_t afi_for_redist_protocol(int protocol)
{
if (protocol == 0)
return AFI_IP;
@@ -350,6 +350,9 @@ static void isis_redist_update_zebra_subscriptions(struct isis *isis)
int level;
int protocol;
+ if (isis->vrf_id == VRF_UNKNOWN)
+ return;
+
char do_subscribe[REDIST_PROTOCOL_COUNT][ZEBRA_ROUTE_MAX + 1];
memset(do_subscribe, 0, sizeof(do_subscribe));
@@ -359,8 +362,9 @@ static void isis_redist_update_zebra_subscriptions(struct isis *isis)
for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
for (level = 0; level < ISIS_LEVELS; level++)
if (area->redist_settings[protocol]
- [type]
- [level].redist)
+ [type][level]
+ .redist
+ == 1)
do_subscribe[protocol][type] =
1;
@@ -377,20 +381,29 @@ static void isis_redist_update_zebra_subscriptions(struct isis *isis)
afi_t afi = afi_for_redist_protocol(protocol);
if (do_subscribe[protocol][type])
- isis_zebra_redistribute_set(afi, type);
+ isis_zebra_redistribute_set(afi, type,
+ isis->vrf_id);
else
- isis_zebra_redistribute_unset(afi, type);
+ isis_zebra_redistribute_unset(afi, type,
+ isis->vrf_id);
}
}
void isis_redist_free(struct isis *isis)
{
+ struct route_node *rn;
int i;
for (i = 0; i < REDIST_PROTOCOL_COUNT; i++) {
if (!isis->ext_info[i])
continue;
+ for (rn = route_top(isis->ext_info[i]); rn;
+ rn = srcdest_route_next(rn)) {
+ if (rn->info)
+ XFREE(MTYPE_ISIS_EXT_INFO, rn->info);
+ }
+
route_table_finish(isis->ext_info[i]);
isis->ext_info[i] = NULL;
}
@@ -498,6 +511,7 @@ void isis_redist_unset(struct isis_area *area, int level, int family, int type)
void isis_redist_area_finish(struct isis_area *area)
{
+ struct route_node *rn;
int protocol;
int level;
int type;
@@ -512,7 +526,15 @@ void isis_redist_area_finish(struct isis_area *area)
redist->redist = 0;
XFREE(MTYPE_ISIS_RMAP_NAME, redist->map_name);
}
+ if (!area->ext_reach[protocol][level])
+ continue;
+ for (rn = route_top(area->ext_reach[protocol][level]);
+ rn; rn = srcdest_route_next(rn)) {
+ if (rn->info)
+ XFREE(MTYPE_ISIS_EXT_INFO, rn->info);
+ }
route_table_finish(area->ext_reach[protocol][level]);
+ area->ext_reach[protocol][level] = NULL;
}
isis_redist_update_zebra_subscriptions(area->isis);
diff --git a/isisd/isis_redist.h b/isisd/isis_redist.h
index fcc4ceadf4..10dccbc518 100644
--- a/isisd/isis_redist.h
+++ b/isisd/isis_redist.h
@@ -47,6 +47,8 @@ struct prefix;
struct prefix_ipv6;
struct vty;
+afi_t afi_for_redist_protocol(int protocol);
+
struct route_table *get_ext_reach(struct isis_area *area, int family,
int level);
void isis_redist_add(struct isis *isis, int type, struct prefix *p,
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index 4bd42ead86..0142e30b2b 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -523,24 +523,24 @@ int isis_distribute_list_update(int routetype)
return 0;
}
-void isis_zebra_redistribute_set(afi_t afi, int type)
+void isis_zebra_redistribute_set(afi_t afi, int type, vrf_id_t vrf_id)
{
if (type == DEFAULT_ROUTE)
zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_ADD,
- zclient, afi, VRF_DEFAULT);
+ zclient, afi, vrf_id);
else
zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, afi, type,
- 0, VRF_DEFAULT);
+ 0, vrf_id);
}
-void isis_zebra_redistribute_unset(afi_t afi, int type)
+void isis_zebra_redistribute_unset(afi_t afi, int type, vrf_id_t vrf_id)
{
if (type == DEFAULT_ROUTE)
zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_DELETE,
- zclient, afi, VRF_DEFAULT);
+ zclient, afi, vrf_id);
else
zclient_redistribute(ZEBRA_REDISTRIBUTE_DELETE, zclient, afi,
- type, 0, VRF_DEFAULT);
+ type, 0, vrf_id);
}
/**
@@ -724,6 +724,18 @@ void isis_zebra_vrf_register(struct isis *isis)
}
}
+void isis_zebra_vrf_deregister(struct isis *isis)
+{
+ if (!zclient || zclient->sock < 0 || !isis)
+ return;
+
+ if (isis->vrf_id != VRF_UNKNOWN) {
+ if (IS_DEBUG_EVENTS)
+ zlog_debug("%s: Deregister VRF %s id %u", __func__,
+ isis->name, isis->vrf_id);
+ zclient_send_dereg_requests(zclient, isis->vrf_id);
+ }
+}
static void isis_zebra_connected(struct zclient *zclient)
{
diff --git a/isisd/isis_zebra.h b/isisd/isis_zebra.h
index b44ec4f085..348d7b3eab 100644
--- a/isisd/isis_zebra.h
+++ b/isisd/isis_zebra.h
@@ -57,8 +57,8 @@ void isis_zebra_prefix_sid_uninstall(struct isis_area *area,
struct isis_sr_psid_info *psid);
void isis_zebra_send_adjacency_sid(int cmd, const struct sr_adjacency *sra);
int isis_distribute_list_update(int routetype);
-void isis_zebra_redistribute_set(afi_t afi, int type);
-void isis_zebra_redistribute_unset(afi_t afi, int type);
+void isis_zebra_redistribute_set(afi_t afi, int type, vrf_id_t vrf_id);
+void isis_zebra_redistribute_unset(afi_t afi, int type, vrf_id_t vrf_id);
int isis_zebra_rlfa_register(struct isis_spftree *spftree, struct rlfa *rlfa);
void isis_zebra_rlfa_unregister_all(struct isis_spftree *spftree);
bool isis_zebra_label_manager_ready(void);
@@ -66,5 +66,6 @@ int isis_zebra_label_manager_connect(void);
int isis_zebra_request_label_range(uint32_t base, uint32_t chunk_size);
int isis_zebra_release_label_range(uint32_t start, uint32_t end);
void isis_zebra_vrf_register(struct isis *isis);
+void isis_zebra_vrf_deregister(struct isis *isis);
#endif /* _ZEBRA_ISIS_ZEBRA_H */
diff --git a/isisd/isisd.c b/isisd/isisd.c
index cb3734bd41..bda2295ae1 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -175,15 +175,6 @@ void isis_master_init(struct thread_master *master)
im->master = master;
}
-void isis_global_instance_create(const char *vrf_name)
-{
- struct isis *isis;
-
- isis = isis_lookup_by_vrfname(vrf_name);
- if (isis == NULL)
- isis_new(vrf_name);
-}
-
struct isis *isis_new(const char *vrf_name)
{
struct vrf *vrf;
@@ -200,6 +191,8 @@ struct isis *isis_new(const char *vrf_name)
else
isis->vrf_id = VRF_UNKNOWN;
+ isis_zebra_vrf_register(isis);
+
if (IS_DEBUG_EVENTS)
zlog_debug(
"%s: Create new isis instance with vrf_name %s vrf_id %u",
@@ -227,6 +220,8 @@ void isis_finish(struct isis *isis)
listnode_delete(im->isis, isis);
+ isis_zebra_vrf_deregister(isis);
+
vrf = vrf_lookup_by_name(isis->name);
if (vrf)
isis_vrf_unlink(isis, vrf);
@@ -567,8 +562,7 @@ void isis_area_destroy(struct isis_area *area)
area_mt_finish(area);
if (listcount(area->isis->area_list) == 0) {
- memset(area->isis->sysid, 0, ISIS_SYS_ID_LEN);
- area->isis->sysid_set = 0;
+ isis_finish(area->isis);
}
XFREE(MTYPE_ISIS_AREA, area);
@@ -595,6 +589,68 @@ static int isis_vrf_delete(struct vrf *vrf)
return 0;
}
+static void isis_set_redist_vrf_bitmaps(struct isis *isis, bool set)
+{
+ struct listnode *node;
+ struct isis_area *area;
+ int type;
+ int level;
+ int protocol;
+
+ char do_subscribe[REDIST_PROTOCOL_COUNT][ZEBRA_ROUTE_MAX + 1];
+
+ memset(do_subscribe, 0, sizeof(do_subscribe));
+
+ for (ALL_LIST_ELEMENTS_RO(isis->area_list, node, area))
+ for (protocol = 0; protocol < REDIST_PROTOCOL_COUNT; protocol++)
+ for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
+ for (level = 0; level < ISIS_LEVELS; level++)
+ if (area->redist_settings[protocol]
+ [type][level]
+ .redist
+ == 1)
+ do_subscribe[protocol][type] =
+ 1;
+
+ for (protocol = 0; protocol < REDIST_PROTOCOL_COUNT; protocol++)
+ for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++) {
+ /* This field is actually controlling transmission of
+ * the IS-IS
+ * routes to Zebra and has nothing to do with
+ * redistribution,
+ * so skip it. */
+ if (type == PROTO_TYPE)
+ continue;
+
+ if (!do_subscribe[protocol][type])
+ continue;
+
+ afi_t afi = afi_for_redist_protocol(protocol);
+
+ if (type == DEFAULT_ROUTE) {
+ if (set)
+ vrf_bitmap_set(
+ zclient->default_information
+ [afi],
+ isis->vrf_id);
+ else
+ vrf_bitmap_unset(
+ zclient->default_information
+ [afi],
+ isis->vrf_id);
+ } else {
+ if (set)
+ vrf_bitmap_set(
+ zclient->redist[afi][type],
+ isis->vrf_id);
+ else
+ vrf_bitmap_unset(
+ zclient->redist[afi][type],
+ isis->vrf_id);
+ }
+ }
+}
+
static int isis_vrf_enable(struct vrf *vrf)
{
struct isis *isis;
@@ -614,13 +670,10 @@ static int isis_vrf_enable(struct vrf *vrf)
"%s: isis linked to vrf %s vrf_id %u (old id %u)",
__func__, vrf->name, isis->vrf_id, old_vrf_id);
if (old_vrf_id != isis->vrf_id) {
- frr_with_privs (&isisd_privs) {
- /* stop zebra redist to us for old vrf */
- zclient_send_dereg_requests(zclient,
- old_vrf_id);
- /* start zebra redist to us for new vrf */
- isis_zebra_vrf_register(isis);
- }
+ /* start zebra redist to us for new vrf */
+ isis_set_redist_vrf_bitmaps(isis, true);
+
+ isis_zebra_vrf_register(isis);
}
}
@@ -642,6 +695,10 @@ static int isis_vrf_disable(struct vrf *vrf)
if (isis) {
old_vrf_id = isis->vrf_id;
+ isis_zebra_vrf_deregister(isis);
+
+ isis_set_redist_vrf_bitmaps(isis, false);
+
/* We have instance configured, unlink
* from VRF and make it "down".
*/
diff --git a/tests/isisd/test_isis_spf.c b/tests/isisd/test_isis_spf.c
index 915f849aec..b89a5a008e 100644
--- a/tests/isisd/test_isis_spf.c
+++ b/tests/isisd/test_isis_spf.c
@@ -51,8 +51,6 @@ enum test_type {
#define F_LEVEL1_ONLY 0x08
#define F_LEVEL2_ONLY 0x10
-static struct isis *isis;
-
static void test_run_spf(struct vty *vty, const struct isis_topology *topology,
const struct isis_test_node *root,
struct isis_area *area, struct lspdb_head *lspdb,
@@ -257,8 +255,8 @@ static int test_run(struct vty *vty, const struct isis_topology *topology,
uint8_t fail_id[ISIS_SYS_ID_LEN] = {};
/* Init topology. */
- memcpy(isis->sysid, root->sysid, sizeof(isis->sysid));
area = isis_area_create("1", NULL);
+ memcpy(area->isis->sysid, root->sysid, sizeof(area->isis->sysid));
area->is_type = IS_LEVEL_1_AND_2;
area->srdb.enabled = true;
if (test_topology_load(topology, area, area->lspdb) != 0) {
@@ -470,7 +468,6 @@ static void vty_do_exit(int isexit)
{
printf("\nend.\n");
- isis_finish(isis);
cmd_terminate();
vty_terminate();
yang_terminate();
@@ -555,7 +552,6 @@ int main(int argc, char **argv)
/* IS-IS inits. */
yang_module_load("frr-isisd");
- isis = isis_new(VRF_DEFAULT_NAME);
SET_FLAG(im->options, F_ISIS_UNIT_TEST);
debug_spf_events |= DEBUG_SPF_EVENTS;
debug_lfa |= DEBUG_LFA;
diff --git a/tests/topotests/isis_topo1_vrf/r1/r1_route.json b/tests/topotests/isis_topo1_vrf/r1/r1_route.json
index f0a3593a4c..8359baadaf 100644
--- a/tests/topotests/isis_topo1_vrf/r1/r1_route.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_route.json
@@ -2,7 +2,7 @@
"10.0.10.0/24": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r1/r1_route6.json b/tests/topotests/isis_topo1_vrf/r1/r1_route6.json
index 888b9e2c42..74961262b4 100644
--- a/tests/topotests/isis_topo1_vrf/r1/r1_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_route6.json
@@ -18,7 +18,7 @@
"2001:db8:2:1::/64": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r1/r1_topology.json b/tests/topotests/isis_topo1_vrf/r1/r1_topology.json
index 1a6fe6d5c6..666fa52b19 100644
--- a/tests/topotests/isis_topo1_vrf/r1/r1_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_topology.json
@@ -33,7 +33,7 @@
},
{
"interface": "r1-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP TE",
@@ -41,7 +41,7 @@
},
{
"interface": "r1-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP TE",
@@ -67,8 +67,8 @@
"vertex": "r3"
},
{
+ "metric": "10",
"interface": "r1-eth0",
- "metric": "20",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP6 internal",
diff --git a/tests/topotests/isis_topo1_vrf/r2/r2_route.json b/tests/topotests/isis_topo1_vrf/r2/r2_route.json
index a26cdfad8e..e2eee112b3 100644
--- a/tests/topotests/isis_topo1_vrf/r2/r2_route.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_route.json
@@ -2,7 +2,7 @@
"10.0.11.0/24": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r2/r2_route6.json b/tests/topotests/isis_topo1_vrf/r2/r2_route6.json
index b01789b8d9..21b953d0f7 100644
--- a/tests/topotests/isis_topo1_vrf/r2/r2_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_route6.json
@@ -18,7 +18,7 @@
"2001:db8:2:2::/64": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r2/r2_topology.json b/tests/topotests/isis_topo1_vrf/r2/r2_topology.json
index a77f7977f9..c26ad1ee37 100644
--- a/tests/topotests/isis_topo1_vrf/r2/r2_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_topology.json
@@ -33,7 +33,7 @@
},
{
"interface": "r2-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r4",
"parent": "r4(4)",
"type": "IP TE",
@@ -41,7 +41,7 @@
},
{
"interface": "r2-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r4",
"parent": "r4(4)",
"type": "IP TE",
@@ -67,8 +67,8 @@
"vertex": "r4"
},
{
+ "metric": "10",
"interface": "r2-eth0",
- "metric": "20",
"next-hop": "r4",
"parent": "r4(4)",
"type": "IP6 internal",
diff --git a/tests/topotests/isis_topo1_vrf/r3/r3_route.json b/tests/topotests/isis_topo1_vrf/r3/r3_route.json
index 9717df5c1a..33ad90cda1 100644
--- a/tests/topotests/isis_topo1_vrf/r3/r3_route.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_route.json
@@ -2,7 +2,7 @@
"10.0.10.0/24": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"afi": "ipv4",
@@ -32,7 +32,7 @@
"10.0.11.0/24": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
@@ -67,7 +67,7 @@
"10.0.21.0/24": [
{
"distance": 115,
- "metric": 30,
+ "metric": 20,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r3/r3_route6.json b/tests/topotests/isis_topo1_vrf/r3/r3_route6.json
index 31a1e4620f..519fe4968a 100644
--- a/tests/topotests/isis_topo1_vrf/r3/r3_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_route6.json
@@ -18,7 +18,7 @@
"2001:db8:1:2::/64": [
{
"distance": 115,
- "metric": 30,
+ "metric": 20,
"nexthops": [
{
"active": true,
@@ -52,7 +52,7 @@
"2001:db8:2:2::/64": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r3/r3_topology.json b/tests/topotests/isis_topo1_vrf/r3/r3_topology.json
index 1e5d331965..34892d4a3a 100644
--- a/tests/topotests/isis_topo1_vrf/r3/r3_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_topology.json
@@ -21,7 +21,7 @@
},
{
"interface": "r3-eth1",
- "metric": "20",
+ "metric": "10",
"next-hop": "r5",
"parent": "r5(4)",
"type": "IP TE",
@@ -29,7 +29,7 @@
},
{
"interface": "r3-eth1",
- "metric": "20",
+ "metric": "10",
"next-hop": "r5",
"parent": "r5(4)",
"type": "IP TE",
@@ -37,7 +37,7 @@
},
{
"interface": "r3-eth1",
- "metric": "30",
+ "metric": "20",
"next-hop": "r5",
"parent": "r4(4)",
"type": "IP TE",
@@ -63,16 +63,16 @@
"vertex": "r5"
},
{
+ "metric": "10",
"interface": "r3-eth1",
- "metric": "20",
"next-hop": "r5",
"parent": "r5(4)",
"type": "IP6 internal",
"vertex": "2001:db8:2:2::/64"
},
{
+ "metric": "20",
"interface": "r3-eth1",
- "metric": "30",
"next-hop": "r5",
"parent": "r4(4)",
"type": "IP6 internal",
@@ -101,7 +101,7 @@
},
{
"interface": "r3-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP TE",
diff --git a/tests/topotests/isis_topo1_vrf/r4/r4_route.json b/tests/topotests/isis_topo1_vrf/r4/r4_route.json
index 6cb79b0301..6fb3bd99d1 100644
--- a/tests/topotests/isis_topo1_vrf/r4/r4_route.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_route.json
@@ -1,7 +1,7 @@
{
"10.0.10.0/24": [
{
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r4/r4_route6.json b/tests/topotests/isis_topo1_vrf/r4/r4_route6.json
index 88a91749c2..702a83fb72 100644
--- a/tests/topotests/isis_topo1_vrf/r4/r4_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_route6.json
@@ -2,7 +2,7 @@
"2001:db8:1:1::/64": [
{
"distance": 115,
- "metric": 30,
+ "metric": 20,
"nexthops": [
{
"active": true,
@@ -36,7 +36,7 @@
"2001:db8:2:1::/64": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r4/r4_topology.json b/tests/topotests/isis_topo1_vrf/r4/r4_topology.json
index 34f5ac9ca4..d40008aa30 100644
--- a/tests/topotests/isis_topo1_vrf/r4/r4_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_topology.json
@@ -21,7 +21,7 @@
},
{
"interface": "r4-eth1",
- "metric": "20",
+ "metric": "10",
"next-hop": "r5",
"parent": "r5(4)",
"type": "IP TE",
@@ -29,7 +29,7 @@
},
{
"interface": "r4-eth1",
- "metric": "20",
+ "metric": "10",
"next-hop": "r5",
"parent": "r5(4)",
"type": "IP TE",
@@ -37,7 +37,7 @@
},
{
"interface": "r4-eth1",
- "metric": "30",
+ "metric": "20",
"next-hop": "r5",
"parent": "r3(4)",
"type": "IP TE",
@@ -63,16 +63,16 @@
"vertex": "r5"
},
{
+ "metric": "10",
"interface": "r4-eth1",
- "metric": "20",
"next-hop": "r5",
"parent": "r5(4)",
"type": "IP6 internal",
"vertex": "2001:db8:2:1::/64"
},
{
+ "metric": "20",
"interface": "r4-eth1",
- "metric": "30",
"next-hop": "r5",
"parent": "r3(4)",
"type": "IP6 internal",
@@ -101,7 +101,7 @@
},
{
"interface": "r4-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r2",
"parent": "r2(4)",
"type": "IP TE",
diff --git a/tests/topotests/isis_topo1_vrf/r5/r5_route.json b/tests/topotests/isis_topo1_vrf/r5/r5_route.json
index 5efa36bce6..a254b6fdd5 100644
--- a/tests/topotests/isis_topo1_vrf/r5/r5_route.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_route.json
@@ -2,7 +2,7 @@
"10.0.10.0/24": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"afi": "ipv4",
diff --git a/tests/topotests/isis_topo1_vrf/r5/r5_route6.json b/tests/topotests/isis_topo1_vrf/r5/r5_route6.json
index 5e8f6364af..06fc78f703 100644
--- a/tests/topotests/isis_topo1_vrf/r5/r5_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_route6.json
@@ -2,7 +2,7 @@
"2001:db8:1:1::/64": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
@@ -20,7 +20,7 @@
"2001:db8:1:2::/64": [
{
"distance": 115,
- "metric": 20,
+ "metric": 10,
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis_topo1_vrf/r5/r5_topology.json b/tests/topotests/isis_topo1_vrf/r5/r5_topology.json
index ace56536e9..2a088cae30 100644
--- a/tests/topotests/isis_topo1_vrf/r5/r5_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_topology.json
@@ -35,7 +35,7 @@
},
{
"interface": "r5-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP TE",
@@ -43,7 +43,7 @@
},
{
"interface": "r5-eth0",
- "metric": "20",
+ "metric": "10",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP TE",
@@ -51,7 +51,7 @@
},
{
"interface": "r5-eth1",
- "metric": "20",
+ "metric": "10",
"next-hop": "r4",
"parent": "r4(4)",
"type": "IP TE",
@@ -59,7 +59,7 @@
},
{
"interface": "r5-eth1",
- "metric": "20",
+ "metric": "10",
"next-hop": "r4",
"parent": "r4(4)",
"type": "IP TE",
@@ -99,16 +99,16 @@
"vertex": "r4"
},
{
+ "metric": "10",
"interface": "r5-eth0",
- "metric": "20",
"next-hop": "r3",
"parent": "r3(4)",
"type": "IP6 internal",
"vertex": "2001:db8:1:1::/64"
},
{
+ "metric": "10",
"interface": "r5-eth1",
- "metric": "20",
"next-hop": "r4",
"parent": "r4(4)",
"type": "IP6 internal",