From 532e75e6ee1484d1940d9a918548227e920de9b5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 24 Aug 2017 07:34:21 -0400 Subject: [PATCH] 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 --- eigrpd/eigrp_topology.c | 11 +++++++++-- 1 file 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 */ -- 2.39.5