2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00

OpenFlow: Enable OpenFlow 1.4 by default.

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

Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
Ben Pfaff 2017-04-24 11:49:59 -07:00
parent 01f92b743e
commit 8d34857911
7 changed files with 45 additions and 35 deletions

View File

@ -34,29 +34,19 @@ Q: What versions of OpenFlow does Open vSwitch support?
Open vSwitch OF1.0 OF1.1 OF1.2 OF1.3 OF1.4 OF1.5 OF1.6 Open vSwitch OF1.0 OF1.1 OF1.2 OF1.3 OF1.4 OF1.5 OF1.6
=============== ===== ===== ===== ===== ===== ===== ===== =============== ===== ===== ===== ===== ===== ===== =====
1.9 and earlier yes --- --- --- --- --- --- 1.9 and earlier yes --- --- --- --- --- ---
1.10 yes --- (*) (*) --- --- --- 1.10, 1.11 yes --- (*) (*) --- --- ---
1.11 yes --- (*) (*) --- --- --- 2.0, 2.1 yes (*) (*) (*) --- --- ---
2.0 yes (*) (*) (*) --- --- ---
2.1 yes (*) (*) (*) --- --- ---
2.2 yes (*) (*) (*) (%) (*) --- 2.2 yes (*) (*) (*) (%) (*) ---
2.3 yes yes yes yes (*) (*) --- 2.3, 2.4 yes yes yes yes (*) (*) ---
2.4 yes yes yes yes (*) (*) --- 2.5, 2.6, 2.7 yes yes yes yes (*) (*) (*)
2.5 yes yes yes yes (*) (*) (*) 2.8 yes yes yes yes yes (*) (*)
=============== ===== ===== ===== ===== ===== ===== ===== =============== ===== ===== ===== ===== ===== ===== =====
(*) Supported, with one or more missing features. --- Not supported.
yes Supported and enabled by default
(*) Supported, but missing features, and must be enabled by user.
(%) Experimental, unsafe implementation. (%) Experimental, unsafe implementation.
Open vSwitch 2.3 enables OpenFlow 1.0, 1.1, 1.2, and 1.3 by default in
ovs-vswitchd. In Open vSwitch 1.10 through 2.2, OpenFlow 1.1, 1.2, and 1.3
must be enabled manually in ovs-vswitchd.
Some versions of OpenFlow are supported with missing features and therefore
not enabled by default: OpenFlow 1.4 and 1.5, in Open vSwitch 2.3 and
later, as well as OpenFlow 1.6 in Open vSwitch 2.5 and later. Also, the
OpenFlow 1.6 specification is still under development and thus subject to
change.
In any case, the user may override the default: In any case, the user may override the default:
- To enable OpenFlow 1.0, 1.1, 1.2, and 1.3 on bridge br0:: - To enable OpenFlow 1.0, 1.1, 1.2, and 1.3 on bridge br0::
@ -83,7 +73,7 @@ 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.4 and 1.5 is solidly implemented, Open vSwitch When support for OpenFlow 1.5 and 1.6 is solidly implemented, Open vSwitch
will enable those version by default. will enable those version by default.
Q: Does Open vSwitch support MPLS? Q: Does Open vSwitch support MPLS?

3
NEWS
View File

@ -26,6 +26,9 @@ Post-v2.7.0
abbreviated to 4 hex digits. abbreviated to 4 hex digits.
- Add the command 'ovs-appctl stp/show' (see ovs-vswitchd(8)). - Add the command 'ovs-appctl stp/show' (see ovs-vswitchd(8)).
- OpenFlow: - OpenFlow:
* All features required by OpenFlow 1.4 are now implemented, so
ovs-vswitchd now enables OpenFlow 1.4 by default (in addition to
OpenFlow 1.0 to 1.3).
* Increased support for OpenFlow 1.6 (draft). * Increased support for OpenFlow 1.6 (draft).
* Bundles now support hashing by just nw_src or nw_dst. * Bundles now support hashing by just nw_src or nw_dst.
* The "learn" action now supports a "limit" option (see ovs-ofctl(8)). * The "learn" action now supports a "limit" option (see ovs-ofctl(8)).

View File

@ -189,7 +189,8 @@ enum ofputil_protocol ofputil_protocols_from_version_bitmap(uint32_t bitmap);
#define OFPUTIL_SUPPORTED_VERSIONS ((1u << OFP10_VERSION) | \ #define OFPUTIL_SUPPORTED_VERSIONS ((1u << OFP10_VERSION) | \
(1u << OFP11_VERSION) | \ (1u << OFP11_VERSION) | \
(1u << OFP12_VERSION) | \ (1u << OFP12_VERSION) | \
(1u << OFP13_VERSION)) (1u << OFP13_VERSION) | \
(1u << OFP14_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

@ -9,7 +9,6 @@ Sets the OpenFlow protocol versions that are allowed when establishing
an OpenFlow session. an OpenFlow session.
. .
.IP .IP
The following versions are considered to be ready for general use.
These protocol versions are enabled by default: These protocol versions are enabled by default:
. .
.RS .RS
@ -17,9 +16,9 @@ These protocol versions are enabled by default:
\fBOpenFlow10\fR, for OpenFlow 1.0. \fBOpenFlow10\fR, for OpenFlow 1.0.
.RE .RE
. .
.IP The following protocol versions are generally supported, but for
Support for the following protocol versions is provided for testing compatibility with older versions of Open vSwitch they are not enabled
and development purposes. They are not enabled by default: by default:
. .
.RS .RS
.IP \(bu .IP \(bu
@ -30,4 +29,19 @@ and development purposes. They are not enabled by default:
. .
.IP \(bu .IP \(bu
\fBOpenFlow13\fR, for OpenFlow 1.3. \fBOpenFlow13\fR, for OpenFlow 1.3.
.
.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.
.
.IP \(bu
\fBOpenFlow16\fR, for OpenFlow 1.6.
.RE .RE

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc. * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2017 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.
@ -242,7 +242,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, OFP13_VERSION); CHECK(hello.version, OFP14_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);
@ -315,7 +315,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, OFP13_VERSION); CHECK(hello.version, OFP14_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);
@ -366,7 +366,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, OFP13_VERSION, hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_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);
@ -382,7 +382,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, OFP13_VERSION, hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_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);
@ -398,7 +398,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, OFP13_VERSION, echo = ofpraw_alloc_xid(OFPRAW_OFPT_ECHO_REQUEST, OFP14_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);
@ -424,7 +424,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, OFP13_VERSION, hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP14_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

@ -2245,8 +2245,10 @@ format.
.IP "\fBOXM-OpenFlow12\fR" .IP "\fBOXM-OpenFlow12\fR"
.IQ "\fBOXM-OpenFlow13\fR" .IQ "\fBOXM-OpenFlow13\fR"
.IQ "\fBOXM-OpenFlow14\fR" .IQ "\fBOXM-OpenFlow14\fR"
.IQ "\fBOXM-OpenFlow15\fR"
.IQ "\fBOXM-OpenFlow16\fR"
These are the standard OXM (OpenFlow Extensible Match) flow format in These are the standard OXM (OpenFlow Extensible Match) flow format in
OpenFlow 1.2, 1.3, and 1.4, respectively. OpenFlow 1.2 and later.
.RE .RE
. .
.IP .IP

View File

@ -858,12 +858,12 @@
<column name="protocols"> <column name="protocols">
<p> <p>
List of OpenFlow protocols that may be used when negotiating List of OpenFlow protocols that may be used when negotiating
a connection with a controller. OpenFlow 1.0, 1.1, 1.2, and a connection with a controller. OpenFlow 1.0, 1.1, 1.2, 1.3, and
1.3 are enabled by default if this column is empty. 1.4 are enabled by default if this column is empty.
</p> </p>
<p> <p>
OpenFlow 1.4, 1.5, and 1.6 are not enabled by default because their OpenFlow 1.5 and 1.6 are not enabled by default because their
implementations are missing features. In addition, the OpenFlow 1.6 implementations are missing features. In addition, the OpenFlow 1.6
specification is still under development and thus subject to change. specification is still under development and thus subject to change.
</p> </p>