Re: [ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread Ben Pfaff
On Fri, Jun 07, 2019 at 04:27:32PM -0700, Ben Pfaff wrote:
> The OpenFlow specification says that buckets in select groups with a weight
> of zero should not be selected, but the ofproto-dpif implementation could
> select them in corner cases.  This fixes the problem.
> 
> Reported-by: ychen 
> Reported-at: 
> https://mail.openvswitch.org/pipermail/ovs-dev/2019-May/359349.html
> Signed-off-by: Ben Pfaff 

Ignore this, I sent a proper v2.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread Ben Pfaff
I sent v2:
https://mail.openvswitch.org/pipermail/ovs-dev/2019-June/359582.html

On Fri, Jun 07, 2019 at 03:55:36PM -0700, Ben Pfaff wrote:
> Weights are significant only for "select" groups;
> group_first_live_bucket() is used to pick a bucket only for
> "fast-failover" groups.  So I think that this is correct for group
> selection now.
> 
> However, group_is_alive() also uses group_first_live_bucket() for
> determining whether a group is alive, and for that purpose it should
> consider the group type whereas currently it just treats every group as
> if it was a fast-failover group.
> 
> I'll fix that and send a v2.
> 
> On Fri, Jun 07, 2019 at 03:27:28PM -0700, Yifeng Sun wrote:
> > Hi Ben,
> > 
> > group_first_live_bucket() can still return zero-weighted bucket, then
> > this bucket will
> > be used via pick_ff_group() and xlate_group_action__(). I am wondering
> > if it is an
> > issue?
> > 
> > Thanks,
> > Yifeng
> > 
> > On Fri, Jun 7, 2019 at 12:04 PM 0-day Robot  wrote:
> > >
> > > Bleep bloop.  Greetings Ben Pfaff, I am a robot and I have tried out your 
> > > patch.
> > > Thanks for your contribution.
> > >
> > > I encountered some error that I wasn't expecting.  See the details below.
> > >
> > >
> > > checkpatch:
> > > WARNING: Line is 88 characters long (recommended limit is 79)
> > > #23 FILE: ofproto/ofproto-dpif-xlate.c:1:
> > > /* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 
> > > 2019 Nicira, Inc.
> > >
> > > Lines checked: 47, Warnings: 1, Errors: 0
> > >
> > >
> > > Please check this out.  If you feel there has been an error, please email 
> > > acon...@bytheb.org
> > >
> > > Thanks,
> > > 0-day Robot
> > > ___
> > > dev mailing list
> > > d...@openvswitch.org
> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread Ben Pfaff
The OpenFlow specification says that buckets in select groups with a weight
of zero should not be selected, but the ofproto-dpif implementation could
select them in corner cases.  This fixes the problem.

Reported-by: ychen 
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2019-May/359349.html
Signed-off-by: Ben Pfaff 
---
 ofproto/ofproto-dpif-xlate.c | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 04d69ed06c20..1ace92d22019 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Nicira, 
Inc.
+/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 
Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -1864,8 +1864,8 @@ group_is_alive(const struct xlate_ctx *ctx, uint32_t 
group_id, int depth)
 #define MAX_LIVENESS_RECURSION 128 /* Arbitrary limit */
 
 static bool
-bucket_is_alive(const struct xlate_ctx *ctx,
-struct ofputil_bucket *bucket, int depth)
+bucket_is_alive(const struct xlate_ctx *ctx, const struct group_dpif *group,
+const struct ofputil_bucket *bucket, int depth)
 {
 if (depth >= MAX_LIVENESS_RECURSION) {
 xlate_report_error(ctx, "bucket chaining exceeded %d links",
@@ -1873,6 +1873,12 @@ bucket_is_alive(const struct xlate_ctx *ctx,
 return false;
 }
 
+/* In "select" groups, buckets with weight 0 are not used.
+ * In other kinds of groups, weight does not matter. */
+if (group->up.type == OFPGT11_SELECT && bucket->weight == 0) {
+return false;
+}
+
 return (!ofputil_bucket_has_liveness(bucket)
 || (bucket->watch_port != OFPP_ANY
&& odp_port_is_alive(ctx, bucket->watch_port))
@@ -1910,7 +1916,7 @@ group_first_live_bucket(const struct xlate_ctx *ctx,
 {
 struct ofputil_bucket *bucket;
 LIST_FOR_EACH (bucket, list_node, >up.buckets) {
-if (bucket_is_alive(ctx, bucket, depth)) {
+if (bucket_is_alive(ctx, group, bucket, depth)) {
 return bucket;
 }
 xlate_report_bucket_not_live(ctx, bucket);
@@ -1929,7 +1935,7 @@ group_best_live_bucket(const struct xlate_ctx *ctx,
 
 struct ofputil_bucket *bucket;
 LIST_FOR_EACH (bucket, list_node, >up.buckets) {
-if (bucket_is_alive(ctx, bucket, 0)) {
+if (bucket_is_alive(ctx, group, bucket, 0)) {
 uint32_t score =
 (hash_int(bucket->bucket_id, basis) & 0x) * bucket->weight;
 if (score >= best_score) {
@@ -4535,7 +4541,7 @@ pick_dp_hash_select_group(struct xlate_ctx *ctx, struct 
group_dpif *group)
 for (int i = 0; i <= hash_mask; i++) {
 struct ofputil_bucket *b =
 group->hash_map[(dp_hash + i) & hash_mask];
-if (bucket_is_alive(ctx, b, 0)) {
+if (bucket_is_alive(ctx, group, b, 0)) {
 return b;
 }
 }
-- 
2.20.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread Ben Pfaff
Weights are significant only for "select" groups;
group_first_live_bucket() is used to pick a bucket only for
"fast-failover" groups.  So I think that this is correct for group
selection now.

However, group_is_alive() also uses group_first_live_bucket() for
determining whether a group is alive, and for that purpose it should
consider the group type whereas currently it just treats every group as
if it was a fast-failover group.

I'll fix that and send a v2.

On Fri, Jun 07, 2019 at 03:27:28PM -0700, Yifeng Sun wrote:
> Hi Ben,
> 
> group_first_live_bucket() can still return zero-weighted bucket, then
> this bucket will
> be used via pick_ff_group() and xlate_group_action__(). I am wondering
> if it is an
> issue?
> 
> Thanks,
> Yifeng
> 
> On Fri, Jun 7, 2019 at 12:04 PM 0-day Robot  wrote:
> >
> > Bleep bloop.  Greetings Ben Pfaff, I am a robot and I have tried out your 
> > patch.
> > Thanks for your contribution.
> >
> > I encountered some error that I wasn't expecting.  See the details below.
> >
> >
> > checkpatch:
> > WARNING: Line is 88 characters long (recommended limit is 79)
> > #23 FILE: ofproto/ofproto-dpif-xlate.c:1:
> > /* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 
> > Nicira, Inc.
> >
> > Lines checked: 47, Warnings: 1, Errors: 0
> >
> >
> > Please check this out.  If you feel there has been an error, please email 
> > acon...@bytheb.org
> >
> > Thanks,
> > 0-day Robot
> > ___
> > dev mailing list
> > d...@openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread Yifeng Sun
Hi Ben,

group_first_live_bucket() can still return zero-weighted bucket, then
this bucket will
be used via pick_ff_group() and xlate_group_action__(). I am wondering
if it is an
issue?

Thanks,
Yifeng

On Fri, Jun 7, 2019 at 12:04 PM 0-day Robot  wrote:
>
> Bleep bloop.  Greetings Ben Pfaff, I am a robot and I have tried out your 
> patch.
> Thanks for your contribution.
>
> I encountered some error that I wasn't expecting.  See the details below.
>
>
> checkpatch:
> WARNING: Line is 88 characters long (recommended limit is 79)
> #23 FILE: ofproto/ofproto-dpif-xlate.c:1:
> /* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 
> Nicira, Inc.
>
> Lines checked: 47, Warnings: 1, Errors: 0
>
>
> Please check this out.  If you feel there has been an error, please email 
> acon...@bytheb.org
>
> Thanks,
> 0-day Robot
> ___
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread 0-day Robot
Bleep bloop.  Greetings Ben Pfaff, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
WARNING: Line is 88 characters long (recommended limit is 79)
#23 FILE: ofproto/ofproto-dpif-xlate.c:1:
/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 
Nicira, Inc.

Lines checked: 47, Warnings: 1, Errors: 0


Please check this out.  If you feel there has been an error, please email 
acon...@bytheb.org

Thanks,
0-day Robot
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH] ofproto-dpif-xlate: Do not use zero-weight buckets in select groups.

2019-06-07 Thread Ben Pfaff
The OpenFlow specification says that buckets in select groups with a weight
of zero should not be selected, but the ofproto-dpif implementation could
select them in corner cases.  This fixes the problem.

Reported-by: ychen 
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2019-May/359349.html
Signed-off-by: Ben Pfaff 
---
 ofproto/ofproto-dpif-xlate.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index ae8b9991c7cd..da7fa56362d3 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Nicira, 
Inc.
+/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 
Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -1929,7 +1929,7 @@ group_best_live_bucket(const struct xlate_ctx *ctx,
 
 struct ofputil_bucket *bucket;
 LIST_FOR_EACH (bucket, list_node, >up.buckets) {
-if (bucket_is_alive(ctx, bucket, 0)) {
+if (bucket_is_alive(ctx, bucket, 0) && bucket->weight > 0) {
 uint32_t score =
 (hash_int(bucket->bucket_id, basis) & 0x) * bucket->weight;
 if (score >= best_score) {
@@ -4535,7 +4535,7 @@ pick_dp_hash_select_group(struct xlate_ctx *ctx, struct 
group_dpif *group)
 for (int i = 0; i <= hash_mask; i++) {
 struct ofputil_bucket *b =
 group->hash_map[(dp_hash + i) & hash_mask];
-if (bucket_is_alive(ctx, b, 0)) {
+if (bucket_is_alive(ctx, b, 0) && b->weight > 0) {
 return b;
 }
 }
-- 
2.20.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev