]> git.puffer.fish Git - matthieu/frr.git/commitdiff
eigrpd: Fix distance comparison
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 24 Aug 2017 11:34:21 +0000 (07:34 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 24 Aug 2017 12:09:04 +0000 (08:09 -0400)
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>
eigrpd/eigrp_topology.c

index 2e8128f4740d03852d78a6d3984821259df482b2..64e65b694cce8838dfd44de393cb22051b6c4fa3 100644 (file)
@@ -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
         */