]> git.puffer.fish Git - mirror/frr.git/commitdiff
eigrpd: Make eigrp_get_fsm_event use metric changed
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 16 Aug 2017 02:14:18 +0000 (22:14 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 16 Aug 2017 02:38:17 +0000 (22:38 -0400)
Refactor eigrp_get_fsm_event a tiny bit to let all
the states get the new metric.

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

index 852362e1921c76c5364f4fde22834130b7a6094c..f697577c62da0afa5328febea15c3b285e31d4d7 100644 (file)
@@ -185,6 +185,7 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
        struct eigrp_prefix_entry *prefix = msg->prefix;
        struct eigrp_neighbor_entry *entry = msg->entry;
        u_char actual_state = prefix->state;
+       enum metric_change change;
 
        if (entry == NULL) {
                entry = eigrp_neighbor_entry_new();
@@ -194,19 +195,18 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
                msg->entry = entry;
        }
 
-       // Dividing by actual state of prefix's FSM
+       /*
+        * Calculate resultant metrics and insert to correct position
+        * in entries list
+        */
+       change = eigrp_topology_update_distance(msg);
+
        switch (actual_state) {
        case EIGRP_FSM_STATE_PASSIVE: {
-               // Calculate resultant metrics and insert to correct position in
-               // entries list
-               eigrp_topology_update_distance(msg);
-
                struct eigrp_neighbor_entry *head =
                        (struct eigrp_neighbor_entry *)
                                entry->prefix->entries->head->data;
-               // zlog_info ("flag: %d rdist: %u dist: %u pfdist: %u pdist:
-               // %u", head->flags, head->reported_distance, head->distance,
-               // prefix->fdistance, prefix->distance);
+
                if (head->reported_distance < prefix->fdistance) {
                        return EIGRP_FSM_KEEP_STATE;
                }
@@ -226,8 +226,6 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
                break;
        }
        case EIGRP_FSM_STATE_ACTIVE_0: {
-               eigrp_topology_update_distance(msg);
-
                if (msg->packet_type == EIGRP_OPC_REPLY) {
                        listnode_delete(prefix->rij, entry->adv_router);
                        if (prefix->rij->count) {
@@ -254,15 +252,13 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
                break;
        }
        case EIGRP_FSM_STATE_ACTIVE_1: {
-               int change = eigrp_topology_update_distance(msg);
-
                if (msg->packet_type == EIGRP_OPC_QUERY
                    && (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
                        return EIGRP_FSM_EVENT_QACT;
                } else if (msg->packet_type == EIGRP_OPC_REPLY) {
                        listnode_delete(prefix->rij, entry->adv_router);
 
-                       if (change == 1
+                       if (change == METRIC_INCREASE
                            && (entry->flags
                                & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
                                return EIGRP_FSM_EVENT_DINC;
@@ -282,8 +278,6 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
                break;
        }
        case EIGRP_FSM_STATE_ACTIVE_2: {
-               eigrp_topology_update_distance(msg);
-
                if (msg->packet_type == EIGRP_OPC_REPLY) {
                        listnode_delete(prefix->rij, entry->adv_router);
                        if (prefix->rij->count) {
@@ -305,12 +299,10 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
                break;
        }
        case EIGRP_FSM_STATE_ACTIVE_3: {
-               int change = eigrp_topology_update_distance(msg);
-
                if (msg->packet_type == EIGRP_OPC_REPLY) {
                        listnode_delete(prefix->rij, entry->adv_router);
 
-                       if (change == 1
+                       if (change == METRIC_INCREASE
                            && (entry->flags
                                & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
                                return EIGRP_FSM_EVENT_DINC;