summaryrefslogtreecommitdiff
path: root/eigrpd/eigrp_topology.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-08-24 07:34:21 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-08-24 08:09:04 -0400
commit532e75e6ee1484d1940d9a918548227e920de9b5 (patch)
treee02352cbcf5af255cb8178696a6c79364d793a09 /eigrpd/eigrp_topology.c
parent4a64eed5773e6472985a7d42599853af553e4f05 (diff)
eigrpd: Fix distance comparison
The distance comparison for when we received an internal and we already had an internal was overriding the metrics of the connected. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'eigrpd/eigrp_topology.c')
-rw-r--r--eigrpd/eigrp_topology.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/eigrpd/eigrp_topology.c b/eigrpd/eigrp_topology.c
index 2e8128f474..64e65b694c 100644
--- a/eigrpd/eigrp_topology.c
+++ b/eigrpd/eigrp_topology.c
@@ -379,6 +379,10 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag
change = METRIC_DECREASE;
break;
case EIGRP_INT:
+ if (prefix->nt == EIGRP_TOPOLOGY_TYPE_CONNECTED) {
+ change = METRIC_INCREASE;
+ goto distance_done;
+ }
if (eigrp_metrics_is_same(msg->metrics,
entry->reported_metric)) {
return change; // No change
@@ -387,9 +391,10 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag
new_reported_distance = eigrp_calculate_metrics(eigrp,
msg->metrics);
- if (entry->reported_distance < new_reported_distance)
+ if (entry->reported_distance < new_reported_distance) {
change = METRIC_INCREASE;
- else
+ goto distance_done;
+ } else
change = METRIC_DECREASE;
entry->reported_metric = msg->metrics;
@@ -404,12 +409,14 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag
return change;
} else {
change = METRIC_INCREASE;
+ goto distance_done;
}
break;
default:
zlog_err("%s: Please implement handler", __PRETTY_FUNCTION__);
break;
}
+ distance_done:
/*
* Move to correct position in list according to new distance
*/