]> git.puffer.fish Git - mirror/frr.git/commitdiff
eigrpd: make fsm msg data_type an enum
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 22 Aug 2017 20:19:23 +0000 (16:19 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 24 Aug 2017 12:04:20 +0000 (08:04 -0400)
We need to eventually be able to handle multiple
data types to figure out if the distance is better
worse.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
eigrpd/eigrp_query.c
eigrpd/eigrp_reply.c
eigrpd/eigrp_siaquery.c
eigrpd/eigrp_siareply.c
eigrpd/eigrp_structs.h
eigrpd/eigrp_topology.c
eigrpd/eigrp_update.c

index b9351ed8960f652c120e9774649c91cb6cf62bc5..92aa7f985565fca187c9658fc9e6179409e684ed 100644 (file)
@@ -131,7 +131,7 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph,
                                                                  nbr);
                                msg.packet_type = EIGRP_OPC_QUERY;
                                msg.eigrp = eigrp;
-                               msg.data_type = EIGRP_TLV_IPv4_INT;
+                               msg.data_type = EIGRP_INT;
                                msg.adv_router = nbr;
                                msg.data.ipv4_int_type = tlv;
                                msg.entry = entry;
index 7015413f568f2f58e409081dfecb45a9ec260dbd..92cea77305a8962e7ef69466fad51745aa46a175 100644 (file)
@@ -237,7 +237,7 @@ void eigrp_reply_receive(struct eigrp *eigrp, struct ip *iph,
 
                        msg.packet_type = EIGRP_OPC_REPLY;
                        msg.eigrp = eigrp;
-                       msg.data_type = EIGRP_TLV_IPv4_INT;
+                       msg.data_type = EIGRP_INT;
                        msg.adv_router = nbr;
                        msg.data.ipv4_int_type = tlv;
                        msg.entry = entry;
index 9447efb2e26b5e54aa66296b5746b1f96377139d..60decc5bef2d327dafab5edd8a18f122e0608fe2 100644 (file)
@@ -100,7 +100,7 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
                                                                  nbr);
                                msg.packet_type = EIGRP_OPC_SIAQUERY;
                                msg.eigrp = eigrp;
-                               msg.data_type = EIGRP_TLV_IPv4_INT;
+                               msg.data_type = EIGRP_INT;
                                msg.adv_router = nbr;
                                msg.data.ipv4_int_type = tlv;
                                msg.entry = entry;
index 2cf7520a965bfd6e2b616c8ed55ac3f44bed5b24..e9609402002b3ce18984e1e43877af38cbc98ac0 100644 (file)
@@ -99,7 +99,7 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
                                                                  nbr);
                                msg.packet_type = EIGRP_OPC_SIAQUERY;
                                msg.eigrp = eigrp;
-                               msg.data_type = EIGRP_TLV_IPv4_INT;
+                               msg.data_type = EIGRP_INT;
                                msg.adv_router = nbr;
                                msg.data.ipv4_int_type = tlv;
                                msg.entry = entry;
index 0c15436d4fd0badeb9abe535755e84ede3a05a00..c81dfebb468c6a4ae0a1fd9198cb3e2b84eedea4 100644 (file)
@@ -499,6 +499,11 @@ struct eigrp_neighbor_entry {
 };
 
 //---------------------------------------------------------------------------------------------------------------------------------------------
+typedef enum {
+       EIGRP_CONNECTED,
+       EIGRP_INT,
+       EIGRP_EXT,
+} msg_data_t;
 
 /* EIGRP Finite State Machine */
 
@@ -508,7 +513,7 @@ struct eigrp_fsm_action_message {
        struct eigrp_neighbor *adv_router; // advertising neighbor
        struct eigrp_neighbor_entry *entry;
        struct eigrp_prefix_entry *prefix;
-       int data_type; // internal or external tlv type
+       msg_data_t data_type; // internal or external tlv type
        union {
                struct TLV_IPv4_External_type *ipv4_ext_data;
                struct TLV_IPv4_Internal_type *ipv4_int_type;
index d4d55393a804a8d7d66f9ecf451f2294e835ad10..d1c09d661213ea8eb487b08d63f8b5f42f7f4134 100644 (file)
@@ -384,32 +384,45 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag
 
        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;
+       switch(msg->data_type) {
+       case EIGRP_CONNECTED:
+               break;
+       case EIGRP_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 change; // No change
-               }
+                       int_data = msg->data.ipv4_int_type;
+                       if (eigrp_metrics_is_same(int_data->metric,
+                                                 entry->reported_metric)) {
+                               return change; // No change
+                       }
 
-               new_reported_distance = eigrp_calculate_metrics(eigrp,
-                                                               int_data->metric);
+                       new_reported_distance = eigrp_calculate_metrics(eigrp,
+                                                                       int_data->metric);
 
-               if (entry->reported_distance  < new_reported_distance)
-                       change = METRIC_INCREASE;
-               else
-                       change = METRIC_DECREASE;
+                       if (entry->reported_distance  < new_reported_distance)
+                               change = METRIC_INCREASE;
+                       else
+                               change = METRIC_DECREASE;
 
-               entry->reported_metric = int_data->metric;
-               entry->reported_distance = new_reported_distance;
+                       entry->reported_metric = int_data->metric;
+                       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 change;
+                       entry->distance = eigrp_calculate_total_metrics(eigrp, entry);
+                       break;
+               }
+       case EIGRP_EXT:
+               {
+                       ext_data = msg->data.ipv4_ext_data;
+                       if (eigrp_metrics_is_same(ext_data->metric,
+                                                 entry->reported_metric))
+                               return change;
+
+                       break;
+               }
+       default:
+               zlog_err("%s: Please implement handler", __PRETTY_FUNCTION__);
+               break;
        }
        /*
         * Move to correct position in list according to new distance
@@ -492,7 +505,7 @@ void eigrp_topology_neighbor_down(struct eigrp *eigrp,
                                tlv->metric.delay = EIGRP_MAX_METRIC;
                                msg.packet_type = EIGRP_OPC_UPDATE;
                                msg.eigrp = eigrp;
-                               msg.data_type = EIGRP_TLV_IPv4_INT;
+                               msg.data_type = EIGRP_INT;
                                msg.adv_router = nbr;
                                msg.data.ipv4_int_type = tlv;
                                msg.entry = entry;
index 89b8ecd92841be7013fe3eb1b8d1fac91bd75ed9..ba54fa5727cc10c6540c49ca29874009e62d5332 100644 (file)
@@ -139,7 +139,7 @@ static void eigrp_update_receive_GR_ask(struct eigrp *eigrp,
 
                fsm_msg.packet_type = EIGRP_OPC_UPDATE;
                fsm_msg.eigrp = eigrp;
-               fsm_msg.data_type = EIGRP_TLV_IPv4_INT;
+               fsm_msg.data_type = EIGRP_INT;
                fsm_msg.adv_router = nbr;
                fsm_msg.data.ipv4_int_type = tlv_max;
                fsm_msg.entry = entry;
@@ -315,7 +315,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
 
                                msg.packet_type = EIGRP_OPC_UPDATE;
                                msg.eigrp = eigrp;
-                               msg.data_type = EIGRP_TLV_IPv4_INT;
+                               msg.data_type = EIGRP_INT;
                                msg.adv_router = nbr;
                                msg.data.ipv4_int_type = tlv;
                                msg.entry = entry;
@@ -978,7 +978,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
 
                        fsm_msg.packet_type = EIGRP_OPC_UPDATE;
                        fsm_msg.eigrp = e;
-                       fsm_msg.data_type = EIGRP_TLV_IPv4_INT;
+                       fsm_msg.data_type = EIGRP_INT;
                        fsm_msg.adv_router = nbr;
                        fsm_msg.data.ipv4_int_type = tlv_max;
                        fsm_msg.entry = entry;