>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

Reply via email to