]> git.proxmox.com Git - mirror_frr.git/blobdiff - eigrpd/eigrp_topology.c
Merge pull request #2160 from donaldsharp/prefix_sid
[mirror_frr.git] / eigrpd / eigrp_topology.c
index bab47ea133f4caf6050679eef13ab8a9cbed89df..becb29a95faafb530994c6303284b98eeeaf1daf 100644 (file)
@@ -362,7 +362,7 @@ eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg)
        struct eigrp_prefix_entry *prefix = msg->prefix;
        struct eigrp_nexthop_entry *entry = msg->entry;
        enum metric_change change = METRIC_SAME;
-       u_int32_t new_reported_distance;
+       uint32_t new_reported_distance;
 
        assert(entry);
 
@@ -443,17 +443,24 @@ void eigrp_topology_update_node_flags(struct eigrp_prefix_entry *dest)
        struct eigrp *eigrp = eigrp_lookup();
 
        for (ALL_LIST_ELEMENTS_RO(dest->entries, node, entry)) {
-               if (((uint64_t)entry->distance
-                    <= (uint64_t)dest->distance * (uint64_t)eigrp->variance)
-                   && entry->distance != EIGRP_MAX_METRIC) // is successor
-               {
-                       entry->flags |= EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
-                       entry->flags &= ~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
-               } else if (entry->reported_distance
-                          < dest->fdistance) // is feasible successor
-               {
-                       entry->flags |= EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
-                       entry->flags &= ~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
+               if (entry->reported_distance < dest->fdistance) {
+                       // is feasible successor, can be successor
+                       if (((uint64_t)entry->distance
+                            <= (uint64_t)dest->distance
+                                       * (uint64_t)eigrp->variance)
+                           && entry->distance != EIGRP_MAX_METRIC) {
+                               // is successor
+                               entry->flags |=
+                                       EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
+                               entry->flags &=
+                                       ~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
+                       } else {
+                               // is feasible successor only
+                               entry->flags |=
+                                       EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
+                               entry->flags &=
+                                       ~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
+                       }
                } else {
                        entry->flags &= ~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
                        entry->flags &= ~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;