[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