--- /dev/null
+DisableFormat: true
+SortIncludes: false
choice = load_balance_get_bucket_i (lb, hash & lb->lb_n_buckets_minus_1);
dpo_copy (&tmp, choice);
}
- else if (adj->ia_flags & ADJ_FLAG_MIDCHAIN_FIXUP_FLOW_HASH)
+ else if (lb->lb_n_buckets > 1)
{
+ /*
+ * the client has chosen not to use the stacking to select a
+ * bucket, and there are more than one buckets. there's no
+ * value in using the midchain's fixed rewrite string to select
+ * the path, so force a flow hash on the inner.
+ */
+ adj->rewrite_header.flags |= VNET_REWRITE_FIXUP_FLOW_HASH;
+ }
+
+ if (adj->ia_flags & ADJ_FLAG_MIDCHAIN_FIXUP_FLOW_HASH)
+ {
+ /*
+ * The client, for reasons unbeknownst to adj, wants to force
+ * a flow hash on the inner, we will oblige.
+ */
adj->rewrite_header.flags |= VNET_REWRITE_FIXUP_FLOW_HASH;
}
}
ti = gm->tunnel_index_by_sw_if_index[sw_if_index];
t = pool_elt_at_index (gm->tunnels, ti);
+ af = ADJ_FLAG_NONE;
- if (t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH)
- af = ADJ_FLAG_MIDCHAIN_FIXUP_FLOW_HASH;
- else
- af = ADJ_FLAG_MIDCHAIN_IP_STACK;
+ /*
+ * the user has not requested that the load-balancing be based on
+ * a flow hash of the inner packet. so use the stacking to choose
+ * a path.
+ */
+ if (!(t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH))
+ af |= ADJ_FLAG_MIDCHAIN_IP_STACK;
if (VNET_LINK_ETHERNET == adj_get_link_type (ai))
af |= ADJ_FLAG_MIDCHAIN_NO_COUNT;
mgre_walk_ctx_t *ctx = data;
adj_flags_t af;
- if (ctx->t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH)
- af = ADJ_FLAG_MIDCHAIN_FIXUP_FLOW_HASH;
- else
- af = ADJ_FLAG_MIDCHAIN_IP_STACK;
+ af = ADJ_FLAG_NONE;
+
+ /*
+ * the user has not requested that the load-balancing be based on
+ * a flow hash of the inner packet. so use the stacking to choose
+ * a path.
+ */
+ if (!(ctx->t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH))
+ af |= ADJ_FLAG_MIDCHAIN_IP_STACK;
adj_nbr_midchain_update_rewrite
(ai, gre_get_fixup (ctx->t->tunnel_dst.fp_proto,
ipip_tunnel_t *t;
adj_flags_t af;
+ af = ADJ_FLAG_NONE;
t = ipip_tunnel_db_find_by_sw_if_index (sw_if_index);
if (!t)
return;
- if (t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH)
- af = ADJ_FLAG_MIDCHAIN_FIXUP_FLOW_HASH;
- else
- af = ADJ_FLAG_MIDCHAIN_IP_STACK;
+ /*
+ * the user has not requested that the load-balancing be based on
+ * a flow hash of the inner packet. so use the stacking to choose
+ * a path.
+ */
+ if (!(t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH))
+ af |= ADJ_FLAG_MIDCHAIN_IP_STACK;
if (VNET_LINK_ETHERNET == adj_get_link_type (ai))
af |= ADJ_FLAG_MIDCHAIN_NO_COUNT;
af = ADJ_FLAG_NONE;
fixup = ipip_get_fixup (ctx->t, adj_get_link_type (ai), &af);
- if (ctx->t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH)
- af = ADJ_FLAG_MIDCHAIN_FIXUP_FLOW_HASH;
- else
- af = ADJ_FLAG_MIDCHAIN_IP_STACK;
+ /*
+ * the user has not requested that the load-balancing be based on
+ * a flow hash of the inner packet. so use the stacking to choose
+ * a path.
+ */
+ if (!(ctx->t->flags & TUNNEL_ENCAP_DECAP_FLAG_ENCAP_INNER_HASH))
+ af |= ADJ_FLAG_MIDCHAIN_IP_STACK;
adj_nbr_midchain_update_rewrite
(ai, fixup,