ofp-util: Break out encoding of OpenFlow 1.1 group mod messages.
authorSimon Horman <simon.horman@netronome.com>
Mon, 10 Nov 2014 04:47:54 +0000 (13:47 +0900)
committerBen Pfaff <blp@nicira.com>
Mon, 10 Nov 2014 18:02:57 +0000 (10:02 -0800)
This refactoring is in preparation for supporting encoding
of (draft) OpenFlow 1.5 group mod messages.

ONF-JIRA: EXT-350
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/ofp-util.c

index ebe0f20..0a1b7d6 100644 (file)
@@ -7364,17 +7364,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) {
@@ -7394,25 +7413,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