>From Open vSwitch 2.10 onwards, dp_hash is the default selection method for select groups. When this method is used, packet recirculation occurs to compute the hash at the datapath level. Previously, this case was logged as "no live bucket", which was misleading.
Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2023-December/052860.html Fixes: 53cc166ae5fe ("xlate: Use dp_hash for select groups.") Signed-off-by: Alexandra Rukomoinikova <[email protected]> --- ofproto/ofproto-dpif-xlate.c | 6 +++++- tests/ofproto-dpif.at | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 2c8197fb7..920d998e6 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -4988,6 +4988,8 @@ pick_dp_hash_select_group(struct xlate_ctx *ctx, struct group_dpif *group) hash_alg = OVS_HASH_ALG_L4; } ctx_trigger_recirculate_with_hash(ctx, hash_alg, group->hash_basis); + xlate_report(ctx, OFT_DETAIL, + "selection method in use: dp_hash, recirculating"); return NULL; } else { uint32_t hash_mask = group->hash_mask; @@ -5067,7 +5069,9 @@ xlate_group_action__(struct xlate_ctx *ctx, struct group_dpif *group, xlate_group_bucket(ctx, bucket, is_last_action); xlate_group_stats(ctx, group, bucket); } else { - xlate_report(ctx, OFT_DETAIL, "no live bucket"); + if (!ctx->freezing) { + xlate_report(ctx, OFT_DETAIL, "no live bucket"); + } if (ctx->xin->xcache) { ofproto_group_unref(&group->up); } diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at index 7ebbee56d..32c6ccfbd 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -1570,6 +1570,35 @@ AT_CHECK([tail -1 stdout], [0], OVS_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([ofproto-dpif - select group with dp_hash, tracing]) +OVS_VSWITCHD_START +add_of_ports br0 1 2 + +AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 \ + 'group_id=1,type=select,bucket=bucket_id:0,weight:10,actions=output:p1']) + +AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 \ + 'in_port=p1,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,actions=group:1']) + +AT_CHECK([ovs-appctl ofproto/trace br0 \ + in_port=p1,tcp,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.2.0.2,nw_dst=10.2.0.3 | grep -e '->'], [0], [dnl + -> selection method in use: dp_hash, recirculating +]) + +AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 \ + 'group_id=2,type=select,selection_method=dp_hash']) + +AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 \ + 'in_port=p2,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,actions=group:2']) + +AT_CHECK([ovs-appctl ofproto/trace br0 \ + in_port=p2,tcp,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.2.0.2,nw_dst=10.2.0.3 | grep -e '->'], [0], [dnl + -> no live bucket +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([ofproto-dpif - group stats single bucket]) OVS_VSWITCHD_START add_of_ports br0 1 10 11 -- 2.48.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
