diff --git a/Documentation/faq/openflow.rst b/Documentation/faq/openflow.rst index 561d793a6..8c9489170 100644 --- a/Documentation/faq/openflow.rst +++ b/Documentation/faq/openflow.rst @@ -30,17 +30,18 @@ Q: What versions of OpenFlow does Open vSwitch support? A: The following table lists the versions of OpenFlow supported by each version of Open vSwitch: - =============== ===== ===== ===== ===== ===== ===== - Open vSwitch OF1.0 OF1.1 OF1.2 OF1.3 OF1.4 OF1.5 - =============== ===== ===== ===== ===== ===== ===== - 1.9 and earlier yes --- --- --- --- --- - 1.10, 1.11 yes --- (*) (*) --- --- - 2.0, 2.1 yes (*) (*) (*) --- --- - 2.2 yes (*) (*) (*) (%) (*) - 2.3, 2.4 yes yes yes yes (*) (*) - 2.5, 2.6, 2.7 yes yes yes yes (*) (*) - 2.8 yes yes yes yes yes (*) - =============== ===== ===== ===== ===== ===== ===== + ===================== ===== ===== ===== ===== ===== ===== + Open vSwitch OF1.0 OF1.1 OF1.2 OF1.3 OF1.4 OF1.5 + ===================== ===== ===== ===== ===== ===== ===== + 1.9 and earlier yes --- --- --- --- --- + 1.10, 1.11 yes --- (*) (*) --- --- + 2.0, 2.1 yes (*) (*) (*) --- --- + 2.2 yes (*) (*) (*) (%) (*) + 2.3, 2.4 yes yes yes yes (*) (*) + 2.5, 2.6, 2.7 yes yes yes yes (*) (*) + 2.8, 2.9, 2.10, 2.11 yes yes yes yes yes (*) + 2.12 yes yes yes yes yes yes + ===================== ===== ===== ===== ===== ===== ===== --- Not supported. yes Supported and enabled by default @@ -73,8 +74,6 @@ Q: What versions of OpenFlow does Open vSwitch support? could cause crashes. We don't recommend enabling it.) :doc:`/topics/openflow` tracks support for OpenFlow 1.1 and later features. - When support for OpenFlow 1.5 is solidly implemented, Open vSwitch will - enable it by default. Q: Does Open vSwitch support MPLS? @@ -476,7 +475,7 @@ Q: How does OVS divide flows among buckets in an OpenFlow "select" group? different hash function, using a Netronome extension to the OpenFlow 1.5+ group_mod message. For more information, see Documentation/group-selection-method-property.txt in the Open vSwitch - source tree. (OpenFlow 1.5 support in Open vSwitch is still experimental.) + source tree. Q: An OpenFlow "select" group isn't dividing packets evenly among the buckets. diff --git a/Documentation/group-selection-method-property.txt b/Documentation/group-selection-method-property.txt index 29e8249af..0b13da908 100644 --- a/Documentation/group-selection-method-property.txt +++ b/Documentation/group-selection-method-property.txt @@ -18,7 +18,7 @@ Contents 1. Introduction =============== -This text describes a Netronome Extension to (draft) OpenFlow 1.5 that allows a +This text describes a Netronome Extension to OpenFlow 1.5 that allows a controller to provide more information on the selection method for select groups. This proposal is in the form of an enhanced select group type. @@ -30,7 +30,7 @@ the OpenFlow specification. =============== A new Netronome group experimenter property is defined which provides -compatibility with the group mod message defined in draft Open Flow 1.5 +compatibility with the group mod message defined in Open Flow 1.5 (also known as ONF EXT-350) and allows parameters for the selection method of select groups to be passed by the controller. In particular it allows controllers to: @@ -60,14 +60,14 @@ enum ntr_group_mod_subtype { }; -Modifications to the group table from the controller may be done with a -OFPT_GROUP_MOD message described (draft) Open Flow 1.5. Group Entry -Message. Of relevance here is that (draft) Open Flow 1.5 group messages -have properties. +Modifications to the group table from the controller may be done with +a OFPT_GROUP_MOD message described Open Flow 1.5. Group Entry +Message. Of relevance here is that Open Flow 1.5 group messages have +properties. This proposal is defined in terms of an implementation of struct -ofp_group_prop_experimenter which is described in (draft) Open Flow 1.5. -The implementation is: +ofp_group_prop_experimenter which is described in Open Flow 1.5. The +implementation is: struct ntr_group_prop_selection_method { ovs_be16 type; /* OFPGPT_EXPERIMENTER. */ diff --git a/NEWS b/NEWS index 3d6546bc0..af1659ce8 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,9 @@ Post-v2.11.0 * Add support for vHost Post-copy Live Migration (experimental). * OVS validated with DPDK 18.11.1 which is recommended to be used. - OpenFlow: + * All features required by OpenFlow 1.5 are now implemented, so + ovs-vswitchd now enables OpenFlow 1.5 by default (in addition to + OpenFlow 1.0 to 1.4). * Removed support for OpenFlow 1.6 (draft), which ONF abandoned. * New action "check_pkt_larger". * Support for OpenFlow 1.5 "meter" action. diff --git a/include/openvswitch/ofp-protocol.h b/include/openvswitch/ofp-protocol.h index 7873fdd12..741ddc458 100644 --- a/include/openvswitch/ofp-protocol.h +++ b/include/openvswitch/ofp-protocol.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2017 Nicira, Inc. + * Copyright (c) 2008-2017, 2019 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -151,7 +151,8 @@ enum ofputil_protocol ofputil_protocols_from_version_bitmap(uint32_t bitmap); (1u << OFP11_VERSION) | \ (1u << OFP12_VERSION) | \ (1u << OFP13_VERSION) | \ - (1u << OFP14_VERSION)) + (1u << OFP14_VERSION) | \ + (1u << OFP15_VERSION)) #define OFPUTIL_DEFAULT_VERSIONS OFPUTIL_SUPPORTED_VERSIONS enum ofputil_protocol ofputil_protocols_from_string(const char *s); diff --git a/lib/ofp-version-opt.h b/lib/ofp-version-opt.h index 525fd8ac4..f50f400d3 100644 --- a/lib/ofp-version-opt.h +++ b/lib/ofp-version-opt.h @@ -10,7 +10,7 @@ #define OFP_VERSION_OPTION_HANDLERS \ case 'V': \ - ovs_print_version(OFP10_VERSION, OFP14_VERSION); \ + ovs_print_version(OFP10_VERSION, OFP15_VERSION); \ exit(EXIT_SUCCESS); \ \ case 'O': \ diff --git a/lib/ofp-version.man b/lib/ofp-version.man index 0e5391db7..301eb9115 100644 --- a/lib/ofp-version.man +++ b/lib/ofp-version.man @@ -27,12 +27,7 @@ by default: . .IP \(bu \fBOpenFlow14\fR, for OpenFlow 1.4. -.RE . -.IP -Support for the following protocol versions is provided for testing -and development purposes. They are not enabled by default: -. -.RS .IP \(bu \fBOpenFlow15\fR, for OpenFlow 1.5. +.RE diff --git a/tests/test-vconn.c b/tests/test-vconn.c index 73ef9a958..fc8ce4a2c 100644 --- a/tests/test-vconn.c +++ b/tests/test-vconn.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2017 Nicira, Inc. + * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2017, 2019 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -239,7 +239,7 @@ test_read_hello(struct ovs_cmdl_context *ctx) if (retval == sizeof hello) { enum ofpraw raw; - CHECK(hello.version, OFP14_VERSION); + CHECK(hello.version, OFP15_VERSION); CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0); CHECK(raw, OFPRAW_OFPT_HELLO); CHECK(ntohs(hello.length), sizeof hello); @@ -312,7 +312,7 @@ test_send_hello(const char *type, const void *out, size_t out_size, if (retval == sizeof hello) { enum ofpraw raw; - CHECK(hello.version, OFP14_VERSION); + CHECK(hello.version, OFP15_VERSION); CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0); CHECK(raw, OFPRAW_OFPT_HELLO); CHECK(ntohs(hello.length), sizeof hello); @@ -363,7 +363,7 @@ test_send_plain_hello(struct ovs_cmdl_context *ctx) const char *type = ctx->argv[1]; struct ofpbuf *hello; - hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_VERSION, + hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP15_VERSION, htonl(0x12345678), 0); test_send_hello(type, hello->data, hello->size, 0); ofpbuf_delete(hello); @@ -379,7 +379,7 @@ test_send_long_hello(struct ovs_cmdl_context *ctx) struct ofpbuf *hello; enum { EXTRA_BYTES = 8 }; - hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_VERSION, + hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP15_VERSION, htonl(0x12345678), EXTRA_BYTES); ofpbuf_put_zeros(hello, EXTRA_BYTES); ofpmsg_update_length(hello); @@ -395,7 +395,7 @@ test_send_echo_hello(struct ovs_cmdl_context *ctx) const char *type = ctx->argv[1]; struct ofpbuf *echo; - echo = ofpraw_alloc_xid(OFPRAW_OFPT_ECHO_REQUEST, OFP14_VERSION, + echo = ofpraw_alloc_xid(OFPRAW_OFPT_ECHO_REQUEST, OFP15_VERSION, htonl(0x12345678), 0); test_send_hello(type, echo->data, echo->size, EPROTO); ofpbuf_delete(echo); @@ -421,7 +421,7 @@ test_send_invalid_version_hello(struct ovs_cmdl_context *ctx) const char *type = ctx->argv[1]; struct ofpbuf *hello; - hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_VERSION, + hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP15_VERSION, htonl(0x12345678), 0); ((struct ofp_header *) hello->data)->version = 0; test_send_hello(type, hello->data, hello->size, EPROTO); diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index bf4b6f8dc..69fce7ffb 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -1269,16 +1269,9 @@ -

- List of OpenFlow protocols that may be used when negotiating - a connection with a controller. OpenFlow 1.0, 1.1, 1.2, 1.3, and - 1.4 are enabled by default if this column is empty. -

- -

- OpenFlow 1.5 is not enabled by default because its - implementations is missing features. -

+ List of OpenFlow protocols that may be used when negotiating a + connection with a controller. OpenFlow 1.0, 1.1, 1.2, 1.3, 1.4, and + 1.5 are enabled by default if this column is empty.