This refactoring is in preparation for supporting encoding of (draft) OpenFlow 1.5 group mod messages.
EXT-350 Signed-off-by: Simon Horman <simon.hor...@netronome.com> --- lib/ofp-util.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 30dc2c5..7f8b920 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -7396,13 +7396,28 @@ ofputil_encode_group_mod(enum ofp_version ofp_version, } } +static enum ofperr +ofputil_pull_ofp11_group_mod(struct ofpbuf *msg, enum ofp_version ofp_version, + struct ofputil_group_mod *gm) +{ + const struct ofp11_group_mod *ogm; + + ogm = ofpbuf_pull(msg, sizeof *ogm); + gm->command = ntohs(ogm->command); + gm->type = ogm->type; + gm->group_id = ntohl(ogm->group_id); + + return ofputil_pull_ofp11_buckets(msg, ofpbuf_size(msg), ofp_version, + &gm->buckets); +} + /* Converts OpenFlow group mod message 'oh' into an abstract group mod in * 'gm'. Returns 0 if successful, otherwise an OpenFlow error code. */ enum ofperr ofputil_decode_group_mod(const struct ofp_header *oh, struct ofputil_group_mod *gm) { - const struct ofp11_group_mod *ogm; + enum ofp_version ofp_version = oh->version; struct ofpbuf msg; struct ofputil_bucket *bucket; enum ofperr err; @@ -7410,13 +7425,21 @@ ofputil_decode_group_mod(const struct ofp_header *oh, ofpbuf_use_const(&msg, oh, ntohs(oh->length)); ofpraw_pull_assert(&msg); - ogm = ofpbuf_pull(&msg, sizeof *ogm); - gm->command = ntohs(ogm->command); - gm->type = ogm->type; - gm->group_id = ntohl(ogm->group_id); + switch (ofp_version) + { + case OFP11_VERSION: + case OFP12_VERSION: + case OFP13_VERSION: + case OFP14_VERSION: + case OFP15_VERSION: + err = ofputil_pull_ofp11_group_mod(&msg, ofp_version, gm); + break; + + case OFP10_VERSION: + default: + OVS_NOT_REACHED(); + } - err = ofputil_pull_ofp11_buckets(&msg, ofpbuf_size(&msg), oh->version, - &gm->buckets); if (err) { return err; } -- 2.1.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev