[ovs-dev] [PATCH 07/22] ofp-util: Break-out encoding of OpenFlow 1.1 group mod messages
Simon Horman
simon.horman at netronome.com
Mon Nov 10 04:47:54 UTC 2014
This refactoring is in preparation for supporting encoding
of (draft) OpenFlow 1.5 group mod messages.
EXT-350
Signed-off-by: Simon Horman <simon.horman at netronome.com>
---
lib/ofp-util.c | 45 +++++++++++++++++++++++++--------------------
1 file changed, 25 insertions(+), 20 deletions(-)
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 0f34a11..31c67d9 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -7340,17 +7340,36 @@ ofputil_decode_group_desc_reply(struct ofputil_group_desc *gd,
&gd->buckets);
}
-/* Converts abstract group mod 'gm' into a message for OpenFlow version
- * 'ofp_version' and returns the message. */
-struct ofpbuf *
-ofputil_encode_group_mod(enum ofp_version ofp_version,
- const struct ofputil_group_mod *gm)
+static struct ofpbuf *
+ofputil_encode_ofp11_group_mod(enum ofp_version ofp_version,
+ const struct ofputil_group_mod *gm)
{
struct ofpbuf *b;
struct ofp11_group_mod *ogm;
size_t start_ogm;
struct ofputil_bucket *bucket;
+ b = ofpraw_alloc(OFPRAW_OFPT11_GROUP_MOD, ofp_version, 0);
+ start_ogm = ofpbuf_size(b);
+ ofpbuf_put_zeros(b, sizeof *ogm);
+
+ LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
+ ofputil_put_ofp11_bucket(bucket, b, ofp_version);
+ }
+ ogm = ofpbuf_at_assert(b, start_ogm, sizeof *ogm);
+ ogm->command = htons(gm->command);
+ ogm->type = gm->type;
+ ogm->group_id = htonl(gm->group_id);
+
+ return b;
+}
+
+/* Converts abstract group mod 'gm' into a message for OpenFlow version
+ * 'ofp_version' and returns the message. */
+struct ofpbuf *
+ofputil_encode_group_mod(enum ofp_version ofp_version,
+ const struct ofputil_group_mod *gm)
+{
switch (ofp_version) {
case OFP10_VERSION: {
if (gm->command == OFPGC11_ADD) {
@@ -7370,25 +7389,11 @@ ofputil_encode_group_mod(enum ofp_version ofp_version,
case OFP13_VERSION:
case OFP14_VERSION:
case OFP15_VERSION:
- b = ofpraw_alloc(OFPRAW_OFPT11_GROUP_MOD, ofp_version, 0);
- start_ogm = ofpbuf_size(b);
- ofpbuf_put_zeros(b, sizeof *ogm);
-
- LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
- ofputil_put_ofp11_bucket(bucket, b, ofp_version);
- }
- ogm = ofpbuf_at_assert(b, start_ogm, sizeof *ogm);
- ogm->command = htons(gm->command);
- ogm->type = gm->type;
- ogm->group_id = htonl(gm->group_id);
-
- break;
+ return ofputil_encode_ofp11_group_mod(ofp_version, gm);
default:
OVS_NOT_REACHED();
}
-
- return b;
}
/* Converts OpenFlow group mod message 'oh' into an abstract group mod in
--
2.1.1
More information about the dev
mailing list