Fixing loadbalancing over ECMP for recursive routes 41/5641/2
authorAkshayaNadahalli <anadahal@cisco.com>
Mon, 6 Mar 2017 18:22:29 +0000 (18:22 +0000)
committerNeale Ranns <nranns@cisco.com>
Tue, 7 Mar 2017 08:42:35 +0000 (08:42 +0000)
Change-Id: Ibe1734aeb94bc17cd8d8bc6f35ca7b780aaa9599
Signed-off-by: AkshayaNadahalli <anadahal@cisco.com>
src/vnet/ip/ip4_forward.c
src/vnet/ip/ip6_forward.c

index fe4d676..b3721e6 100644 (file)
@@ -586,8 +586,7 @@ ip4_load_balance (vlib_main_t * vm,
           * We don't want to use the same hash value at each level in the recursion
           * graph as that would lead to polarisation
           */
-         hc0 = vnet_buffer (p0)->ip.flow_hash = 0;
-         hc1 = vnet_buffer (p1)->ip.flow_hash = 0;
+         hc0 = hc1 = 0;
 
          if (PREDICT_FALSE (lb0->lb_n_buckets > 1))
            {
@@ -599,7 +598,7 @@ ip4_load_balance (vlib_main_t * vm,
              else
                {
                  hc0 = vnet_buffer (p0)->ip.flow_hash =
-                   ip4_compute_flow_hash (ip0, hc0);
+                   ip4_compute_flow_hash (ip0, lb0->lb_hash_config);
                }
            }
          if (PREDICT_FALSE (lb1->lb_n_buckets > 1))
@@ -612,7 +611,7 @@ ip4_load_balance (vlib_main_t * vm,
              else
                {
                  hc1 = vnet_buffer (p1)->ip.flow_hash =
-                   ip4_compute_flow_hash (ip1, hc1);
+                   ip4_compute_flow_hash (ip1, lb1->lb_hash_config);
                }
            }
 
@@ -662,7 +661,7 @@ ip4_load_balance (vlib_main_t * vm,
 
          lb0 = load_balance_get (lbi0);
 
-         hc0 = vnet_buffer (p0)->ip.flow_hash = 0;
+         hc0 = 0;
          if (PREDICT_FALSE (lb0->lb_n_buckets > 1))
            {
              if (PREDICT_TRUE (vnet_buffer (p0)->ip.flow_hash))
@@ -673,7 +672,7 @@ ip4_load_balance (vlib_main_t * vm,
              else
                {
                  hc0 = vnet_buffer (p0)->ip.flow_hash =
-                   ip4_compute_flow_hash (ip0, hc0);
+                   ip4_compute_flow_hash (ip0, lb0->lb_hash_config);
                }
            }
 
index 2388a30..066ee54 100644 (file)
@@ -766,8 +766,7 @@ ip6_load_balance (vlib_main_t * vm,
           * We don't want to use the same hash value at each level in the recursion
           * graph as that would lead to polarisation
           */
-         hc0 = vnet_buffer (p0)->ip.flow_hash = 0;
-         hc1 = vnet_buffer (p1)->ip.flow_hash = 0;
+         hc0 = hc1 = 0;
 
          if (PREDICT_FALSE (lb0->lb_n_buckets > 1))
            {
@@ -779,7 +778,7 @@ ip6_load_balance (vlib_main_t * vm,
              else
                {
                  hc0 = vnet_buffer (p0)->ip.flow_hash =
-                   ip6_compute_flow_hash (ip0, hc0);
+                   ip6_compute_flow_hash (ip0, lb0->lb_hash_config);
                }
            }
          if (PREDICT_FALSE (lb1->lb_n_buckets > 1))
@@ -792,7 +791,7 @@ ip6_load_balance (vlib_main_t * vm,
              else
                {
                  hc1 = vnet_buffer (p1)->ip.flow_hash =
-                   ip6_compute_flow_hash (ip1, hc1);
+                   ip6_compute_flow_hash (ip1, lb1->lb_hash_config);
                }
            }
 
@@ -857,7 +856,7 @@ ip6_load_balance (vlib_main_t * vm,
 
          lb0 = load_balance_get (lbi0);
 
-         hc0 = vnet_buffer (p0)->ip.flow_hash = 0;
+         hc0 = 0;
          if (PREDICT_FALSE (lb0->lb_n_buckets > 1))
            {
              if (PREDICT_TRUE (vnet_buffer (p0)->ip.flow_hash))
@@ -868,7 +867,7 @@ ip6_load_balance (vlib_main_t * vm,
              else
                {
                  hc0 = vnet_buffer (p0)->ip.flow_hash =
-                   ip6_compute_flow_hash (ip0, hc0);
+                   ip6_compute_flow_hash (ip0, lb0->lb_hash_config);
                }
            }
          dpo0 =