]> git.proxmox.com Git - mirror_ovs.git/commitdiff
ofproto-dpif-xlate: Fix load balancing for select groups with MPLS.
authorAnju Thomas <anju.thomas@ericsson.com>
Mon, 24 Sep 2018 17:29:34 +0000 (22:59 +0530)
committerBen Pfaff <blp@ovn.org>
Wed, 26 Sep 2018 22:49:21 +0000 (15:49 -0700)
Before this commit, OVS did not do load balancing for select group buckets
in case of mpls tagged packets.  After an MPLS pop action, the expectation
is to trigger recirculation.  This recirculation will ensure an RSS
re-computation which will ensure load balancing in case of select group
bucket.   Due to a missing return statement before bucket selection, the
bucket selection in case of select group happens before the recirculation
and hence no load balancing is achieved.

Signed-off-by: Anju Thomas <anju.thomas@ericsson.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
ofproto/ofproto-dpif-xlate.c
tests/mpls-xlate.at

index d0e7c6b9f55dca23ed9aa974e6fb5f6d8ec70f30..6949595bafff389b0982d33564168fd825aac983 100644 (file)
@@ -4463,6 +4463,7 @@ pick_select_group(struct xlate_ctx *ctx, struct group_dpif *group)
      */
     if (ctx->was_mpls) {
         ctx_trigger_freeze(ctx);
+        return NULL;
     }
 
     switch (group->selection_method) {
index e335b7fdf0a02b52415b17bf4dbf75e83fe3d21f..4392f7baa3939ff635e49feb4002b17c389b8c1e 100644 (file)
@@ -78,8 +78,8 @@ done
 
 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/packets.*actions:1/actions:1/' | strip_used | strip_ufid | sort], [0], [dnl
 flow-dump from non-dpdk interfaces:
-recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=22/0xfffff,tc=0/0,ttl=64/0x0,bos=1/1), packets:3, bytes:54, used:0.0s, actions:pop_mpls(eth_type=0x800),recirc(0x3)
-recirc_id(0x3),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:100
+recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8847),mpls(label=22/0xfffff,tc=0/0,ttl=64/0x0,bos=1/1), packets:3, bytes:54, used:0.0s, actions:pop_mpls(eth_type=0x800),recirc(0x3)
+recirc_id(0x3),in_port(1),packet_type(ns=0,id=0),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=0.0.0.0,dst=0.0.0.0,proto=0,frag=no), actions:100
 ])
 
 dnl Test MPLS pop then all group output (bucket actions do not trigger recirculation)