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;
}
}