diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-08-24 07:34:21 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-08-24 08:09:04 -0400 |
| commit | 532e75e6ee1484d1940d9a918548227e920de9b5 (patch) | |
| tree | e02352cbcf5af255cb8178696a6c79364d793a09 | |
| parent | 4a64eed5773e6472985a7d42599853af553e4f05 (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>
| -rw-r--r-- | eigrpd/eigrp_topology.c | 11 |
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 */ |
