[ovs-dev] [PATCH 2/5] ofproto: Allow the use of the OpenFlow 1.4 protocol

Alexandru Copot alex.mihai.c at gmail.com
Mon Mar 3 13:22:32 UTC 2014


This defines the version number for OpenFlow 1.4 so that the switch
can actually use it. The ovsdb schema is also modified.

Signed-off-by: Alexandru Copot <alex.mihai.c at gmail.com>
Cc: Daniel Baluta <dbaluta at ixiacom.com>
---
 build-aux/extract-ofp-errors       |   3 +-
 build-aux/extract-ofp-msgs         |   8 +--
 include/openflow/openflow-common.h |   4 +-
 lib/ofp-errors.c                   |   2 +
 lib/ofp-msgs.c                     |   5 ++
 lib/ofp-msgs.h                     |   4 +-
 lib/ofp-print.c                    |   5 ++
 lib/ofp-util.c                     | 118 +++++++++++++++++++++++++++++++++++++
 lib/ofp-util.h                     |   7 ++-
 utilities/ovs-ofctl.c              |   1 +
 vswitchd/vswitch.ovsschema         |   5 +-
 11 files changed, 149 insertions(+), 13 deletions(-)

diff --git a/build-aux/extract-ofp-errors b/build-aux/extract-ofp-errors
index bffead4..ee8dd0f 100755
--- a/build-aux/extract-ofp-errors
+++ b/build-aux/extract-ofp-errors
@@ -10,7 +10,8 @@ macros = {}
 version_map = {"1.0": 0x01,
                "1.1": 0x02,
                "1.2": 0x03,
-               "1.3": 0x04}
+               "1.3": 0x04,
+               "1.4": 0x05}
 version_reverse_map = dict((v, k) for (k, v) in version_map.iteritems())
 
 token = None
diff --git a/build-aux/extract-ofp-msgs b/build-aux/extract-ofp-msgs
index 448e7db..9571192 100755
--- a/build-aux/extract-ofp-msgs
+++ b/build-aux/extract-ofp-msgs
@@ -26,10 +26,10 @@ version_map = {"1.0":     (OFP10_VERSION, OFP10_VERSION),
                "1.2":     (OFP12_VERSION, OFP12_VERSION),
                "1.3":     (OFP13_VERSION, OFP13_VERSION),
                "1.4":     (OFP14_VERSION, OFP14_VERSION),
-               "1.0+":    (OFP10_VERSION, OFP13_VERSION),
-               "1.1+":    (OFP11_VERSION, OFP13_VERSION),
-               "1.2+":    (OFP12_VERSION, OFP13_VERSION),
-               "1.3+":    (OFP13_VERSION, OFP13_VERSION),
+               "1.0+":    (OFP10_VERSION, OFP14_VERSION),
+               "1.1+":    (OFP11_VERSION, OFP14_VERSION),
+               "1.2+":    (OFP12_VERSION, OFP14_VERSION),
+               "1.3+":    (OFP13_VERSION, OFP14_VERSION),
                "1.4+":    (OFP14_VERSION, OFP14_VERSION),
                "1.0-1.1": (OFP10_VERSION, OFP11_VERSION),
                "1.0-1.2": (OFP10_VERSION, OFP12_VERSION),
diff --git a/include/openflow/openflow-common.h b/include/openflow/openflow-common.h
index 53aa67e..33df02b 100644
--- a/include/openflow/openflow-common.h
+++ b/include/openflow/openflow-common.h
@@ -75,12 +75,12 @@ enum ofp_version {
     OFP10_VERSION = 0x01,
     OFP11_VERSION = 0x02,
     OFP12_VERSION = 0x03,
-    OFP13_VERSION = 0x04
+    OFP13_VERSION = 0x04,
+    OFP14_VERSION = 0x05
 
     /* When we add real support for these versions, add them to the enum so
      * that we get compiler warnings everywhere we might forget to provide
      * support.  Until then, keep them as macros to avoid those warnings. */
-#define OFP14_VERSION 0x05
 #define OFP15_VERSION 0x06
 };
 
diff --git a/lib/ofp-errors.c b/lib/ofp-errors.c
index 30a021b..a8c5c31 100644
--- a/lib/ofp-errors.c
+++ b/lib/ofp-errors.c
@@ -50,6 +50,8 @@ ofperr_domain_from_version(enum ofp_version version)
         return &ofperr_of12;
     case OFP13_VERSION:
         return &ofperr_of13;
+    case OFP14_VERSION:
+        return &ofperr_of14;
     default:
         return NULL;
     }
diff --git a/lib/ofp-msgs.c b/lib/ofp-msgs.c
index 4f07d0e..092741f 100644
--- a/lib/ofp-msgs.c
+++ b/lib/ofp-msgs.c
@@ -268,6 +268,7 @@ ofp_is_stat_request(enum ofp_version version, uint8_t type)
     case OFP11_VERSION:
     case OFP12_VERSION:
     case OFP13_VERSION:
+    case OFP14_VERSION:
         return type == OFPT11_STATS_REQUEST;
     }
 
@@ -283,6 +284,7 @@ ofp_is_stat_reply(enum ofp_version version, uint8_t type)
     case OFP11_VERSION:
     case OFP12_VERSION:
     case OFP13_VERSION:
+    case OFP14_VERSION:
         return type == OFPT11_STATS_REPLY;
     }
 
@@ -322,6 +324,7 @@ ofphdrs_len(const struct ofphdrs *hdrs)
     case OFP11_VERSION:
     case OFP12_VERSION:
     case OFP13_VERSION:
+    case OFP14_VERSION:
         if (hdrs->type == OFPT11_STATS_REQUEST ||
             hdrs->type == OFPT11_STATS_REPLY) {
             return (hdrs->stat == OFPST_VENDOR
@@ -753,6 +756,7 @@ ofpraw_stats_request_to_reply(enum ofpraw raw, uint8_t version)
     case OFP11_VERSION:
     case OFP12_VERSION:
     case OFP13_VERSION:
+    case OFP14_VERSION:
         ovs_assert(hdrs.type == OFPT11_STATS_REQUEST);
         hdrs.type = OFPT11_STATS_REPLY;
         break;
@@ -939,6 +943,7 @@ ofpmp_flags__(const struct ofp_header *oh)
     case OFP11_VERSION:
     case OFP12_VERSION:
     case OFP13_VERSION:
+    case OFP14_VERSION:
         return &((struct ofp11_stats_msg *) oh)->flags;
     default:
         OVS_NOT_REACHED();
diff --git a/lib/ofp-msgs.h b/lib/ofp-msgs.h
index 26fd6a3..d8dee5b 100644
--- a/lib/ofp-msgs.h
+++ b/lib/ofp-msgs.h
@@ -278,7 +278,7 @@ enum ofpraw {
     OFPRAW_OFPST11_TABLE_REPLY,
     /* OFPST 1.2 (3): struct ofp12_table_stats[]. */
     OFPRAW_OFPST12_TABLE_REPLY,
-    /* OFPST 1.3 (3): struct ofp13_table_stats[]. */
+    /* OFPST 1.3+ (3): struct ofp13_table_stats[]. */
     OFPRAW_OFPST13_TABLE_REPLY,
 
     /* OFPST 1.0 (4): struct ofp10_port_stats_request. */
@@ -310,7 +310,7 @@ enum ofpraw {
 
     /* OFPST 1.1-1.2 (6): uint8_t[8][]. */
     OFPRAW_OFPST11_GROUP_REPLY,
-    /* OFPST 1.3 (6): uint8_t[8][]. */
+    /* OFPST 1.3+ (6): uint8_t[8][]. */
     OFPRAW_OFPST13_GROUP_REPLY,
 
     /* OFPST 1.1+ (7): void. */
diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 06e64f6..4c48ca6 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
@@ -540,6 +540,7 @@ ofp_print_switch_features(struct ds *string, const struct ofp_header *oh)
     case OFP12_VERSION:
         break;
     case OFP13_VERSION:
+    case OFP14_VERSION:
         return; /* no ports in ofp13_switch_features */
     default:
         OVS_NOT_REACHED();
@@ -1790,6 +1791,10 @@ ofp_print_ofpst_table_reply(struct ds *string, const struct ofp_header *oh,
                             int verbosity)
 {
     switch ((enum ofp_version)oh->version) {
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     case OFP13_VERSION:
         ofp_print_ofpst_table_reply13(string, oh, verbosity);
         break;
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index fca18de..9a563eb 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -573,6 +573,7 @@ ofputil_match_typical_len(enum ofputil_protocol protocol)
 
     case OFPUTIL_P_OF12_OXM:
     case OFPUTIL_P_OF13_OXM:
+    case OFPUTIL_P_OF14_OXM:
         return NXM_TYPICAL_LEN;
 
     default:
@@ -613,6 +614,7 @@ ofputil_put_ofp11_match(struct ofpbuf *b, const struct match *match,
 
     case OFPUTIL_P_OF12_OXM:
     case OFPUTIL_P_OF13_OXM:
+    case OFPUTIL_P_OF14_OXM:
         return oxm_put_match(b, match);
     }
 
@@ -659,6 +661,7 @@ static const struct proto_abbrev proto_abbrevs[] = {
 #define N_PROTO_ABBREVS ARRAY_SIZE(proto_abbrevs)
 
 enum ofputil_protocol ofputil_flow_dump_protocols[] = {
+    OFPUTIL_P_OF14_OXM,
     OFPUTIL_P_OF13_OXM,
     OFPUTIL_P_OF12_OXM,
     OFPUTIL_P_OF11_STD,
@@ -683,6 +686,8 @@ ofputil_protocols_from_ofp_version(enum ofp_version version)
         return OFPUTIL_P_OF12_OXM;
     case OFP13_VERSION:
         return OFPUTIL_P_OF13_OXM;
+    case OFP14_VERSION:
+        return OFPUTIL_P_OF14_OXM;
     default:
         return 0;
     }
@@ -716,6 +721,8 @@ ofputil_protocol_to_ofp_version(enum ofputil_protocol protocol)
         return OFP12_VERSION;
     case OFPUTIL_P_OF13_OXM:
         return OFP13_VERSION;
+    case OFPUTIL_P_OF14_OXM:
+        return OFP14_VERSION;
     }
 
     OVS_NOT_REACHED();
@@ -792,6 +799,9 @@ ofputil_protocol_set_tid(enum ofputil_protocol protocol, bool enable)
     case OFPUTIL_P_OF13_OXM:
         return OFPUTIL_P_OF13_OXM;
 
+    case OFPUTIL_P_OF14_OXM:
+        return OFPUTIL_P_OF14_OXM;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -832,6 +842,9 @@ ofputil_protocol_set_base(enum ofputil_protocol cur,
     case OFPUTIL_P_OF13_OXM:
         return ofputil_protocol_set_tid(OFPUTIL_P_OF13_OXM, tid);
 
+    case OFPUTIL_P_OF14_OXM:
+        return ofputil_protocol_set_tid(OFPUTIL_P_OF14_OXM, tid);
+
     default:
         OVS_NOT_REACHED();
     }
@@ -868,6 +881,9 @@ ofputil_protocol_to_string(enum ofputil_protocol protocol)
 
     case OFPUTIL_P_OF13_OXM:
         return "OXM-OpenFlow13";
+
+    case OFPUTIL_P_OF14_OXM:
+        return "OXM-OpenFlow14";
     }
 
     /* Check abbreviations. */
@@ -1003,6 +1019,9 @@ ofputil_version_from_string(const char *s)
     if (!strcasecmp(s, "OpenFlow13")) {
         return OFP13_VERSION;
     }
+    if (!strcasecmp(s, "OpenFlow14")) {
+        return OFP14_VERSION;
+    }
     return 0;
 }
 
@@ -1073,6 +1092,8 @@ ofputil_version_to_string(enum ofp_version ofp_version)
         return "OpenFlow12";
     case OFP13_VERSION:
         return "OpenFlow13";
+    case OFP14_VERSION:
+        return "OpenFlow14";
     default:
         OVS_NOT_REACHED();
     }
@@ -1306,6 +1327,7 @@ ofputil_encode_set_protocol(enum ofputil_protocol current,
         case OFPUTIL_P_OF11_STD:
         case OFPUTIL_P_OF12_OXM:
         case OFPUTIL_P_OF13_OXM:
+        case OFPUTIL_P_OF14_OXM:
             /* There is only one variant of each OpenFlow 1.1+ protocol, and we
              * verified above that we're not trying to change versions. */
             OVS_NOT_REACHED();
@@ -2075,6 +2097,10 @@ ofputil_encode_flow_mod(const struct ofputil_flow_mod *fm,
     struct ofpbuf *msg;
 
     switch (protocol) {
+    case OFPUTIL_P_OF14_OXM:
+        OVS_NOT_REACHED();
+        break;
+
     case OFPUTIL_P_OF11_STD:
     case OFPUTIL_P_OF12_OXM:
     case OFPUTIL_P_OF13_OXM: {
@@ -2614,6 +2640,10 @@ ofputil_encode_flow_stats_request(const struct ofputil_flow_stats_request *fsr,
         break;
     }
 
+    case OFPUTIL_P_OF14_OXM:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -3118,6 +3148,10 @@ ofputil_encode_flow_removed(const struct ofputil_flow_removed *fr,
         break;
     }
 
+    case OFPUTIL_P_OF14_OXM:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -3417,6 +3451,7 @@ ofputil_encode_packet_in(const struct ofputil_packet_in *pin,
 
     case OFPUTIL_P_OF12_OXM:
     case OFPUTIL_P_OF13_OXM:
+    case OFPUTIL_P_OF14_OXM:
         packet = ofputil_encode_ofp12_packet_in(pin, protocol);
         break;
 
@@ -3664,6 +3699,7 @@ ofputil_get_phy_port_size(enum ofp_version ofp_version)
     case OFP11_VERSION:
     case OFP12_VERSION:
     case OFP13_VERSION:
+    case OFP14_VERSION:
         return sizeof(struct ofp11_port);
     default:
         OVS_NOT_REACHED();
@@ -3736,6 +3772,10 @@ ofputil_put_phy_port(enum ofp_version ofp_version,
         break;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -3765,6 +3805,10 @@ ofputil_append_port_desc_stats_reply(enum ofp_version ofp_version,
         break;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
       OVS_NOT_REACHED();
     }
@@ -3828,6 +3872,9 @@ ofputil_capabilities_mask(enum ofp_version ofp_version)
     case OFP12_VERSION:
     case OFP13_VERSION:
         return OFPC_COMMON | OFPC12_PORT_BLOCKED;
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         /* Caller needs to check osf->header.version itself */
         return 0;
@@ -3956,6 +4003,9 @@ ofputil_encode_switch_features(const struct ofputil_switch_features *features,
     case OFP13_VERSION:
         raw = OFPRAW_OFPT13_FEATURES_REPLY;
         break;
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -3984,6 +4034,9 @@ ofputil_encode_switch_features(const struct ofputil_switch_features *features,
             osf->capabilities |= htonl(OFPC11_GROUP_STATS);
         }
         break;
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -4057,6 +4110,10 @@ ofputil_encode_port_status(const struct ofputil_port_status *ps,
         raw = OFPRAW_OFPT11_PORT_STATUS;
         break;
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -4150,6 +4207,9 @@ ofputil_encode_port_mod(const struct ofputil_port_mod *pm,
         opm->advertise = netdev_port_features_to_ofp11(pm->advertise);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -4210,6 +4270,9 @@ ofputil_encode_table_mod(const struct ofputil_table_mod *pm,
         otm->config = htonl(pm->config);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -4519,6 +4582,10 @@ ofputil_encode_table_stats_reply(const struct ofp12_table_stats stats[], int n,
             ofputil_put_ofp13_table_stats(&stats[i], reply);
             break;
 
+        case OFP14_VERSION:
+            OVS_NOT_REACHED();
+            break;
+
         default:
             OVS_NOT_REACHED();
         }
@@ -4839,6 +4906,10 @@ ofputil_encode_packet_out(const struct ofputil_packet_out *po,
         break;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -4882,6 +4953,7 @@ ofputil_encode_barrier_request(enum ofp_version ofp_version)
     enum ofpraw type;
 
     switch (ofp_version) {
+    case OFP14_VERSION:
     case OFP13_VERSION:
     case OFP12_VERSION:
     case OFP11_VERSION:
@@ -5162,6 +5234,9 @@ ofputil_pull_phy_port(enum ofp_version ofp_version, struct ofpbuf *b,
         const struct ofp11_port *op = ofpbuf_try_pull(b, sizeof *op);
         return op ? ofputil_decode_ofp11_port(pp, op) : EOF;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -5497,6 +5572,9 @@ ofputil_encode_dump_ports_request(enum ofp_version ofp_version, ofp_port_t port)
         req->port_no = ofputil_port_to_ofp11(port);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -5581,6 +5659,10 @@ ofputil_append_port_stat(struct list *replies,
         break;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -5663,6 +5745,9 @@ ofputil_get_port_stats_size(enum ofp_version ofp_version)
         return sizeof(struct ofp11_port_stats);
     case OFP13_VERSION:
         return sizeof(struct ofp13_port_stats);
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        return 0;
     default:
         OVS_NOT_REACHED();
     }
@@ -5761,6 +5846,10 @@ ofputil_decode_port_stats_request(const struct ofp_header *request,
         return 0;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
@@ -5803,6 +5892,9 @@ ofputil_encode_group_stats_request(enum ofp_version ofp_version,
         req->group_id = htonl(group_id);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -5831,6 +5923,9 @@ ofputil_encode_group_desc_request(enum ofp_version ofp_version)
         request = ofpraw_alloc(OFPRAW_OFPST11_GROUP_DESC_REQUEST, ofp_version, 0);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -5900,6 +5995,10 @@ ofputil_append_group_stats(struct list *replies,
         ofputil_append_of13_group_stats(ogs, replies);
         break;
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     case OFP10_VERSION:
     default:
         OVS_NOT_REACHED();
@@ -5924,6 +6023,9 @@ ofputil_encode_group_features_request(enum ofp_version ofp_version)
                                         ofp_version, 0);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -6277,6 +6379,9 @@ ofputil_encode_group_mod(enum ofp_version ofp_version,
         break;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -6357,6 +6462,9 @@ ofputil_decode_queue_stats_request(const struct ofp_header *request,
         return 0;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -6392,6 +6500,9 @@ ofputil_encode_queue_stats_request(enum ofp_version ofp_version,
         req->queue_id = htonl(oqsr->queue_id);
         break;
     }
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
     default:
         OVS_NOT_REACHED();
     }
@@ -6410,6 +6521,9 @@ ofputil_get_queue_stats_size(enum ofp_version ofp_version)
         return sizeof(struct ofp11_queue_stats);
     case OFP13_VERSION:
         return sizeof(struct ofp13_queue_stats);
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        return 0;
     default:
         OVS_NOT_REACHED();
     }
@@ -6599,6 +6713,10 @@ ofputil_append_queue_stat(struct list *replies,
         break;
     }
 
+    case OFP14_VERSION:
+        OVS_NOT_REACHED();
+        break;
+
     default:
         OVS_NOT_REACHED();
     }
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index bf02b9f..a4143ad 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -108,7 +108,8 @@ enum ofputil_protocol {
      * variant. */
     OFPUTIL_P_OF12_OXM      = 1 << 5,
     OFPUTIL_P_OF13_OXM      = 1 << 6,
-#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_OXM)
+    OFPUTIL_P_OF14_OXM      = 1 << 7,
+#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_OXM | OFPUTIL_P_OF14_OXM)
 
 #define OFPUTIL_P_NXM_OF11_UP (OFPUTIL_P_OF10_NXM_ANY | OFPUTIL_P_OF11_STD | \
                                OFPUTIL_P_ANY_OXM)
@@ -121,8 +122,10 @@ enum ofputil_protocol {
 
 #define OFPUTIL_P_OF13_UP (OFPUTIL_P_OF13_OXM)
 
+#define OFPUTIL_P_OF14_UP (OFPUTIL_P_OF14_OXM)
+
     /* All protocols. */
-#define OFPUTIL_P_ANY ((1 << 7) - 1)
+#define OFPUTIL_P_ANY ((1 << 8) - 1)
 
     /* Protocols in which a specific table may be specified in flow_mods. */
 #define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index e62e646..bfae9fe 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -1539,6 +1539,7 @@ ofctl_monitor(int argc, char *argv[])
         case OFP11_VERSION:
         case OFP12_VERSION:
         case OFP13_VERSION:
+        case OFP14_VERSION:
             break;
         default:
             OVS_NOT_REACHED();
diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema
index 9eb21ed..efaa1da 100644
--- a/vswitchd/vswitch.ovsschema
+++ b/vswitchd/vswitch.ovsschema
@@ -1,6 +1,6 @@
 {"name": "Open_vSwitch",
  "version": "7.4.0",
- "cksum": "951746691 20389",
+ "cksum": "2387737815 20431",
  "tables": {
    "Open_vSwitch": {
      "columns": {
@@ -83,7 +83,8 @@
            "enum": ["set", ["OpenFlow10",
                             "OpenFlow11",
                             "OpenFlow12",
-                            "OpenFlow13"]]},
+                            "OpenFlow13",
+                            "OpenFlow14"]]},
 	   "min": 0, "max": "unlimited"}},
        "fail_mode": {
          "type": {"key": {"type": "string",
-- 
1.9.0




More information about the dev mailing list