Require liveness for fast-failover groups as it is mandated by OpenFlow1.3. Allow livness for select groups which is in keeping with OpenFlow1.3. Disallow liveness it for other group types.
Signed-off-by: Simon Horman <ho...@verge.net.au> --- v8 * First post --- lib/ofp-util.c | 29 ++++++++++++++++++++++++++++- lib/ofp-util.h | 7 +++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/ofp-util.c b/lib/ofp-util.c index d435e99..e588c3b 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -6174,6 +6174,8 @@ ofputil_decode_group_mod(const struct ofp_header *oh, { const struct ofp11_group_mod *ogm; struct ofpbuf msg; + struct ofputil_bucket *bucket; + enum ofperr err; ofpbuf_use_const(&msg, oh, ntohs(oh->length)); ofpraw_pull_assert(&msg); @@ -6183,7 +6185,32 @@ ofputil_decode_group_mod(const struct ofp_header *oh, gm->type = ogm->type; gm->group_id = ntohl(ogm->group_id); - return ofputil_pull_buckets(&msg, oh->version, msg.size, &gm->buckets); + err = ofputil_pull_buckets(&msg, oh->version, msg.size, &gm->buckets); + if (err) { + return err; + } + + LIST_FOR_EACH (bucket, list_node, &gm->buckets) { + switch (gm->type) { + case OFPGT11_ALL: + case OFPGT11_INDIRECT: + if (ofputil_bucket_has_liveness(bucket)) { + return OFPERR_OFPGMFC_WATCH_UNSUPPORTED; + } + break; + case OFPGT11_SELECT: + break; + case OFPGT11_FF: + if (!ofputil_bucket_has_liveness(bucket)) { + return OFPERR_OFPGMFC_INVALID_GROUP; + } + break; + default: + NOT_REACHED(); + } + } + + return 0; } /* Parse a queue status request message into 'oqsr'. diff --git a/lib/ofp-util.h b/lib/ofp-util.h index c37ab2b..177bd2e 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -1006,6 +1006,13 @@ struct ofputil_group_desc { void ofputil_bucket_list_destroy(struct list *buckets); +static inline bool +ofputil_bucket_has_liveness(const struct ofputil_bucket *bucket) +{ + return bucket->watch_port != OFPP_ANY || + bucket->watch_group != OFPG_ANY; +} + struct ofpbuf *ofputil_encode_group_stats_request(enum ofp_version, uint32_t group_id); enum ofperr ofputil_decode_group_stats_request( -- 1.8.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev