Allow OF1.2 to be used as a dump protocol and limit
the underling OpenFlow version for which a dump
protocol may be used.

Signed-off-by: Simon Horman <[email protected]>

---

v12
* No change

v11
* Initial post
---
 lib/ofp-util.c        | 7 ++++---
 lib/ofp-util.h        | 7 ++++++-
 utilities/ovs-ofctl.c | 9 +++++----
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 0a5bd22..34aa42c 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -595,9 +595,10 @@ static const struct proto_abbrev proto_abbrevs[] = {
 };
 #define N_PROTO_ABBREVS ARRAY_SIZE(proto_abbrevs)
 
-enum ofputil_protocol ofputil_flow_dump_protocols[] = {
-    OFPUTIL_P_NXM,
-    OFPUTIL_P_OF10,
+struct proto_dump_ofp ofputil_flow_dump_protocols[] = {
+    { .dump = OFPUTIL_P_OF12, .ofp = OFPUTIL_P_OF12 },
+    { .dump = OFPUTIL_P_NXM,  .ofp = OFPUTIL_P_OF10 },
+    { .dump = OFPUTIL_P_OF10, .ofp = OFPUTIL_P_OF10 },
 };
 size_t ofputil_n_flow_dump_protocols = ARRAY_SIZE(ofputil_flow_dump_protocols);
 
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index 608e718..88e4c11 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -79,7 +79,12 @@ enum ofputil_protocol {
 };
 
 /* Protocols to use for flow dumps, from most to least preferred. */
-extern enum ofputil_protocol ofputil_flow_dump_protocols[];
+struct proto_dump_ofp {
+    enum ofputil_protocol dump;
+    enum ofputil_protocol ofp;
+};
+
+extern struct proto_dump_ofp ofputil_flow_dump_protocols[];
 extern size_t ofputil_n_flow_dump_protocols;
 
 enum ofputil_protocol
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index 1eb9d38..f348814 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -811,10 +811,11 @@ set_protocol_for_flow_dump(struct vconn *vconn,
     int i;
 
     for (i = 0; i < ofputil_n_flow_dump_protocols; i++) {
-        enum ofputil_protocol f = ofputil_flow_dump_protocols[i];
-        if (f & usable_protocols & allowed_protocols
-            && try_set_protocol(vconn, f, &cur_protocol)) {
-            return f;
+        struct proto_dump_ofp pdo = ofputil_flow_dump_protocols[i];
+        if (cur_protocol == pdo.ofp
+            && pdo.dump & usable_protocols & allowed_protocols
+            && try_set_protocol(vconn, pdo.dump, &cur_protocol)) {
+            return pdo.dump;
         }
     }
 
-- 
1.7.10.2.484.gcd07cc5

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to