]> git.puffer.fish Git - mirror/frr.git/commitdiff
eigrpd: cleanup eigrp_topology_update_distance
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 16 Aug 2017 02:09:55 +0000 (22:09 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 16 Aug 2017 02:38:17 +0000 (22:38 -0400)
Cleanup eigrp_topology_update_distance to
return an enum of whether or not the metric
has changed or not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
eigrpd/eigrp_const.h
eigrpd/eigrp_topology.c
eigrpd/eigrp_topology.h

index a6282665e4521df5f94919fdcc6a54f3905690e3..a008891a51be6cb8ff7ffc9377429ca570824a0d 100644 (file)
 #define EIGRP_MULTICAST_ADDRESS            0xe000000A /*224.0.0.10*/
 
 #define EIGRP_MAX_METRIC                   0xffffffffU    /*4294967295*/
+enum metric_change {
+       METRIC_DECREASE,
+       METRIC_SAME,
+       METRIC_INCREASE
+};
 
 #define DEFAULT_ROUTE               ZEBRA_ROUTE_MAX
 #define DEFAULT_ROUTE_TYPE(T) ((T) == DEFAULT_ROUTE)
index ae1396ebaf9580380c6829f9d9c4ca7e95baa020..50d83430a8e8cc2852507670e2e1dce4e09443b9 100644 (file)
@@ -374,42 +374,42 @@ struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *eigrp,
        return prefixes;
 }
 
-int eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg)
+enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg)
 {
        struct eigrp *eigrp = msg->eigrp;
        struct eigrp_prefix_entry *prefix = msg->prefix;
        struct eigrp_neighbor_entry *entry = msg->entry;
-       int change = 0;
+       enum metric_change change = METRIC_SAME;
        assert(entry);
 
        struct TLV_IPv4_External_type *ext_data = NULL;
        struct TLV_IPv4_Internal_type *int_data = NULL;
        if (msg->data_type == EIGRP_TLV_IPv4_INT) {
+               u_int32_t new_reported_distance;
+
                int_data = msg->data.ipv4_int_type;
                if (eigrp_metrics_is_same(int_data->metric,
                                          entry->reported_metric)) {
-                       return 0; // No change
+                       return change; // No change
                }
-               change = entry->reported_distance
-                                        < eigrp_calculate_metrics(
-                                                  eigrp, int_data->metric)
-                                ? 1
-                                : entry->reported_distance
-                                                  > eigrp_calculate_metrics(
-                                                            eigrp,
-                                                            int_data->metric)
-                                          ? 2
-                                          : 3; // Increase : Decrease : No
-                                               // change
+
+               new_reported_distance = eigrp_calculate_metrics(eigrp,
+                                                               int_data->metric);
+
+               if (entry->reported_distance  < new_reported_distance)
+                       change = METRIC_INCREASE;
+               else
+                       change = METRIC_DECREASE;
+
                entry->reported_metric = int_data->metric;
-               entry->reported_distance =
+               entry->reported_distance = new_reported_distance;
                        eigrp_calculate_metrics(eigrp, int_data->metric);
                entry->distance = eigrp_calculate_total_metrics(eigrp, entry);
        } else {
                ext_data = msg->data.ipv4_ext_data;
                if (eigrp_metrics_is_same(ext_data->metric,
                                          entry->reported_metric))
-                       return 0;
+                       return change;
        }
        /*
         * Move to correct position in list according to new distance
index 1340c8210114e84645407d9bc984ec29a32b09bf..0c9b5c60c6a077c9d417a92bcff09bcf811d0efd 100644 (file)
@@ -60,7 +60,7 @@ extern struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *,
                                                   struct eigrp_neighbor *);
 extern void eigrp_topology_update_all_node_flags(struct eigrp *);
 extern void eigrp_topology_update_node_flags(struct eigrp_prefix_entry *);
-extern int eigrp_topology_update_distance(struct eigrp_fsm_action_message *);
+extern enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_message *);
 extern void eigrp_update_routing_table(struct eigrp_prefix_entry *);
 extern void eigrp_topology_neighbor_down(struct eigrp *,
                                         struct eigrp_neighbor *);