2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-29 13:27:59 +00:00

OpenFlow: Enable OpenFlow 1.5 by default.

Open vSwitch now supports all OpenFlow 1.5 required features, so enable
it by default.

Acked-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
Ben Pfaff 2017-04-24 11:49:59 -07:00
parent 4332b67199
commit 13c952ca05
8 changed files with 39 additions and 48 deletions

View File

@ -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 A: The following table lists the versions of OpenFlow supported by each
version of Open vSwitch: version of Open vSwitch:
=============== ===== ===== ===== ===== ===== ===== ===================== ===== ===== ===== ===== ===== =====
Open vSwitch OF1.0 OF1.1 OF1.2 OF1.3 OF1.4 OF1.5 Open vSwitch OF1.0 OF1.1 OF1.2 OF1.3 OF1.4 OF1.5
=============== ===== ===== ===== ===== ===== ===== ===================== ===== ===== ===== ===== ===== =====
1.9 and earlier yes --- --- --- --- --- 1.9 and earlier yes --- --- --- --- ---
1.10, 1.11 yes --- (*) (*) --- --- 1.10, 1.11 yes --- (*) (*) --- ---
2.0, 2.1 yes (*) (*) (*) --- --- 2.0, 2.1 yes (*) (*) (*) --- ---
2.2 yes (*) (*) (*) (%) (*) 2.2 yes (*) (*) (*) (%) (*)
2.3, 2.4 yes yes yes yes (*) (*) 2.3, 2.4 yes yes yes yes (*) (*)
2.5, 2.6, 2.7 yes yes yes yes (*) (*) 2.5, 2.6, 2.7 yes yes yes yes (*) (*)
2.8 yes 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. --- Not supported.
yes Supported and enabled by default 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.) could cause crashes. We don't recommend enabling it.)
:doc:`/topics/openflow` tracks support for OpenFlow 1.1 and later features. :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? 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+ different hash function, using a Netronome extension to the OpenFlow 1.5+
group_mod message. For more information, see group_mod message. For more information, see
Documentation/group-selection-method-property.txt in the Open vSwitch 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. Q: An OpenFlow "select" group isn't dividing packets evenly among the buckets.

View File

@ -18,7 +18,7 @@ Contents
1. Introduction 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 controller to provide more information on the selection method for select
groups. This proposal is in the form of an enhanced select group type. 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 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 (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 method of select groups to be passed by the controller. In particular it
allows controllers to: 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 Modifications to the group table from the controller may be done with
OFPT_GROUP_MOD message described (draft) Open Flow 1.5. Group Entry a OFPT_GROUP_MOD message described Open Flow 1.5. Group Entry
Message. Of relevance here is that (draft) Open Flow 1.5 group messages Message. Of relevance here is that Open Flow 1.5 group messages have
have properties. properties.
This proposal is defined in terms of an implementation of struct This proposal is defined in terms of an implementation of struct
ofp_group_prop_experimenter which is described in (draft) Open Flow 1.5. ofp_group_prop_experimenter which is described in Open Flow 1.5. The
The implementation is: implementation is:
struct ntr_group_prop_selection_method { struct ntr_group_prop_selection_method {
ovs_be16 type; /* OFPGPT_EXPERIMENTER. */ ovs_be16 type; /* OFPGPT_EXPERIMENTER. */

3
NEWS
View File

@ -6,6 +6,9 @@ Post-v2.11.0
* Add support for vHost Post-copy Live Migration (experimental). * Add support for vHost Post-copy Live Migration (experimental).
* OVS validated with DPDK 18.11.1 which is recommended to be used. * OVS validated with DPDK 18.11.1 which is recommended to be used.
- OpenFlow: - 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. * Removed support for OpenFlow 1.6 (draft), which ONF abandoned.
* New action "check_pkt_larger". * New action "check_pkt_larger".
* Support for OpenFlow 1.5 "meter" action. * Support for OpenFlow 1.5 "meter" action.

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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 << OFP11_VERSION) | \
(1u << OFP12_VERSION) | \ (1u << OFP12_VERSION) | \
(1u << OFP13_VERSION) | \ (1u << OFP13_VERSION) | \
(1u << OFP14_VERSION)) (1u << OFP14_VERSION) | \
(1u << OFP15_VERSION))
#define OFPUTIL_DEFAULT_VERSIONS OFPUTIL_SUPPORTED_VERSIONS #define OFPUTIL_DEFAULT_VERSIONS OFPUTIL_SUPPORTED_VERSIONS
enum ofputil_protocol ofputil_protocols_from_string(const char *s); enum ofputil_protocol ofputil_protocols_from_string(const char *s);

View File

@ -10,7 +10,7 @@
#define OFP_VERSION_OPTION_HANDLERS \ #define OFP_VERSION_OPTION_HANDLERS \
case 'V': \ case 'V': \
ovs_print_version(OFP10_VERSION, OFP14_VERSION); \ ovs_print_version(OFP10_VERSION, OFP15_VERSION); \
exit(EXIT_SUCCESS); \ exit(EXIT_SUCCESS); \
\ \
case 'O': \ case 'O': \

View File

@ -27,12 +27,7 @@ by default:
. .
.IP \(bu .IP \(bu
\fBOpenFlow14\fR, for OpenFlow 1.4. \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 .IP \(bu
\fBOpenFlow15\fR, for OpenFlow 1.5. \fBOpenFlow15\fR, for OpenFlow 1.5.
.RE

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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) { if (retval == sizeof hello) {
enum ofpraw raw; enum ofpraw raw;
CHECK(hello.version, OFP14_VERSION); CHECK(hello.version, OFP15_VERSION);
CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0); CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0);
CHECK(raw, OFPRAW_OFPT_HELLO); CHECK(raw, OFPRAW_OFPT_HELLO);
CHECK(ntohs(hello.length), sizeof 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) { if (retval == sizeof hello) {
enum ofpraw raw; enum ofpraw raw;
CHECK(hello.version, OFP14_VERSION); CHECK(hello.version, OFP15_VERSION);
CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0); CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0);
CHECK(raw, OFPRAW_OFPT_HELLO); CHECK(raw, OFPRAW_OFPT_HELLO);
CHECK(ntohs(hello.length), sizeof 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]; const char *type = ctx->argv[1];
struct ofpbuf *hello; struct ofpbuf *hello;
hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_VERSION, hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP15_VERSION,
htonl(0x12345678), 0); htonl(0x12345678), 0);
test_send_hello(type, hello->data, hello->size, 0); test_send_hello(type, hello->data, hello->size, 0);
ofpbuf_delete(hello); ofpbuf_delete(hello);
@ -379,7 +379,7 @@ test_send_long_hello(struct ovs_cmdl_context *ctx)
struct ofpbuf *hello; struct ofpbuf *hello;
enum { EXTRA_BYTES = 8 }; 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); htonl(0x12345678), EXTRA_BYTES);
ofpbuf_put_zeros(hello, EXTRA_BYTES); ofpbuf_put_zeros(hello, EXTRA_BYTES);
ofpmsg_update_length(hello); ofpmsg_update_length(hello);
@ -395,7 +395,7 @@ test_send_echo_hello(struct ovs_cmdl_context *ctx)
const char *type = ctx->argv[1]; const char *type = ctx->argv[1];
struct ofpbuf *echo; 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); htonl(0x12345678), 0);
test_send_hello(type, echo->data, echo->size, EPROTO); test_send_hello(type, echo->data, echo->size, EPROTO);
ofpbuf_delete(echo); ofpbuf_delete(echo);
@ -421,7 +421,7 @@ test_send_invalid_version_hello(struct ovs_cmdl_context *ctx)
const char *type = ctx->argv[1]; const char *type = ctx->argv[1];
struct ofpbuf *hello; struct ofpbuf *hello;
hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_VERSION, hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP15_VERSION,
htonl(0x12345678), 0); htonl(0x12345678), 0);
((struct ofp_header *) hello->data)->version = 0; ((struct ofp_header *) hello->data)->version = 0;
test_send_hello(type, hello->data, hello->size, EPROTO); test_send_hello(type, hello->data, hello->size, EPROTO);

View File

@ -1269,16 +1269,9 @@
</column> </column>
<column name="protocols"> <column name="protocols">
<p> List of OpenFlow protocols that may be used when negotiating a
List of OpenFlow protocols that may be used when negotiating connection with a controller. OpenFlow 1.0, 1.1, 1.2, 1.3, 1.4, and
a connection with a controller. OpenFlow 1.0, 1.1, 1.2, 1.3, and 1.5 are enabled by default if this column is empty.
1.4 are enabled by default if this column is empty.
</p>
<p>
OpenFlow 1.5 is not enabled by default because its
implementations is missing features.
</p>
</column> </column>
</group> </group>