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.miha...@gmail.com> Cc: Daniel Baluta <dbal...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev