]> git.proxmox.com Git - mirror_frr.git/blobdiff - eigrpd/eigrp_metric.c
Merge pull request #12601 from opensourcerouting/feature/bgp_neighbor_path-attribute_...
[mirror_frr.git] / eigrpd / eigrp_metric.c
index 2b05db71d5cb1f4dd1c2af0edc56c98bc1d65ff8..7ccafd4fa8cd897f6d2227eb4203e841f5bfa179 100644 (file)
@@ -21,6 +21,8 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <zebra.h>
+
 #include "eigrpd/eigrp_structs.h"
 #include "eigrpd/eigrpd.h"
 #include "eigrpd/eigrp_types.h"
@@ -84,19 +86,24 @@ eigrp_metric_t eigrp_calculate_metrics(struct eigrp *eigrp,
         */
 
        if (eigrp->k_values[0])
-               composite += (eigrp->k_values[0] * metric.bandwidth);
+               composite += ((eigrp_metric_t)eigrp->k_values[0] *
+                             (eigrp_metric_t)metric.bandwidth);
        if (eigrp->k_values[1])
-               composite += ((eigrp->k_values[1] * metric.bandwidth)
-                             / (256 - metric.load));
+               composite += (((eigrp_metric_t)eigrp->k_values[1] *
+                              (eigrp_metric_t)metric.bandwidth) /
+                             (256 - metric.load));
        if (eigrp->k_values[2])
-               composite += (eigrp->k_values[2] * metric.delay);
+               composite += ((eigrp_metric_t)eigrp->k_values[2] *
+                             (eigrp_metric_t)metric.delay);
        if (eigrp->k_values[3] && !eigrp->k_values[4])
-               composite *= eigrp->k_values[3];
+               composite *= (eigrp_metric_t)eigrp->k_values[3];
        if (!eigrp->k_values[3] && eigrp->k_values[4])
-               composite *= (eigrp->k_values[4] / metric.reliability);
+               composite *= ((eigrp_metric_t)eigrp->k_values[4] /
+                             (eigrp_metric_t)metric.reliability);
        if (eigrp->k_values[3] && eigrp->k_values[4])
-               composite *= ((eigrp->k_values[4] / metric.reliability)
-                             + eigrp->k_values[3]);
+               composite *= (((eigrp_metric_t)eigrp->k_values[4] /
+                              (eigrp_metric_t)metric.reliability) +
+                             (eigrp_metric_t)eigrp->k_values[3]);
 
        composite =
                (composite <= EIGRP_METRIC_MAX) ? composite : EIGRP_METRIC_MAX;