diff --git a/Documentation/faq/openflow.rst b/Documentation/faq/openflow.rst
index f722f9e78b38..4a20255daf21 100644
--- a/Documentation/faq/openflow.rst
+++ b/Documentation/faq/openflow.rst
@@ -30,17 +30,17 @@ 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 OF1.6
-    =============== ===== ===== ===== ===== ===== ===== =====
-    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              yes   yes   yes   yes   yes   (*)
+    =============== ===== ===== ===== ===== ===== =====
 
     --- Not supported.
     yes Supported and enabled by default
@@ -73,8 +73,8 @@ 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 and 1.6 is solidly implemented, Open vSwitch
-    will enable those version by default.
+    When support for OpenFlow 1.5 is solidly implemented, Open vSwitch will
+    enable it by default.
 
 Q: Does Open vSwitch support MPLS?
 
diff --git a/NEWS b/NEWS
index 157d0ec27c28..f23ddb9e354a 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,7 @@ Post-v2.10.0
      * Support for the kernel versions 4.16.x and 4.17.x.
    - OpenFlow:
      * OFPMP_TABLE_FEATURES_REQUEST can now modify table features.
+     * Removed support for OpenFlow 1.6 (draft), which ONF abandoned.
    - ovs-ofctl:
      * "mod-table" command can now change OpenFlow table names.
    - The environment variable OVS_SYSLOG_METHOD, if set, is now used
diff --git a/build-aux/extract-ofp-errors b/build-aux/extract-ofp-errors
index 6f64efd2069d..03f40ea3e4c2 100755
--- a/build-aux/extract-ofp-errors
+++ b/build-aux/extract-ofp-errors
@@ -12,8 +12,7 @@ version_map = {"1.0": 0x01,
                "1.2": 0x03,
                "1.3": 0x04,
                "1.4": 0x05,
-               "1.5": 0x06,
-               "1.6": 0x07}
+               "1.5": 0x06}
 version_reverse_map = dict((v, k) for (k, v) in version_map.items())
 
 token = None
diff --git a/build-aux/extract-ofp-msgs b/build-aux/extract-ofp-msgs
index a67e870035f1..3d50724aebd3 100755
--- a/build-aux/extract-ofp-msgs
+++ b/build-aux/extract-ofp-msgs
@@ -12,8 +12,7 @@ VERSION = {"1.0": 0x01,
            "1.2": 0x03,
            "1.3": 0x04,
            "1.4": 0x05,
-           "1.5": 0x06,
-           "1.6": 0x07}
+           "1.5": 0x06}
 
 NX_VENDOR_ID = 0x00002320
 ONF_VENDOR_ID = 0x4f4e4600
diff --git a/include/openflow/automake.mk b/include/openflow/automake.mk
index 9755e7c0396e..18cc649899f8 100644
--- a/include/openflow/automake.mk
+++ b/include/openflow/automake.mk
@@ -9,7 +9,6 @@ openflowinclude_HEADERS = \
 	include/openflow/openflow-1.3.h \
 	include/openflow/openflow-1.4.h \
 	include/openflow/openflow-1.5.h \
-	include/openflow/openflow-1.6.h \
 	include/openflow/openflow-common.h \
 	include/openflow/openflow.h
 
diff --git a/include/openflow/openflow-1.0.h b/include/openflow/openflow-1.0.h
index ad06610da3a4..68c79526efcb 100644
--- a/include/openflow/openflow-1.0.h
+++ b/include/openflow/openflow-1.0.h
@@ -21,11 +21,6 @@
 
 #include <openflow/openflow-common.h>
 
-/* Maximum name of a port.
- *
- * OpenFlow 1.6 (draft) increases this to 64. */
-#define OFP10_MAX_PORT_NAME_LEN  16
-
 /* Port number(s)   meaning
  * ---------------  --------------------------------------
  * 0x0000           not assigned a meaning by OpenFlow 1.0
@@ -102,7 +97,7 @@ enum ofp10_port_features {
 struct ofp10_phy_port {
     ovs_be16 port_no;
     struct eth_addr hw_addr;
-    char name[OFP10_MAX_PORT_NAME_LEN]; /* Null-terminated */
+    char name[OFP_MAX_PORT_NAME_LEN]; /* Null-terminated */
 
     ovs_be32 config;        /* Bitmap of OFPPC_* and OFPPC10_* flags. */
     ovs_be32 state;         /* Bitmap of OFPPS_* and OFPPS10_* flags. */
diff --git a/include/openflow/openflow-1.1.h b/include/openflow/openflow-1.1.h
index a29db8f3ef87..52e96fdbc513 100644
--- a/include/openflow/openflow-1.1.h
+++ b/include/openflow/openflow-1.1.h
@@ -113,7 +113,7 @@ struct ofp11_port {
     uint8_t pad[4];
     struct eth_addr hw_addr;
     uint8_t pad2[2];                  /* Align to 64 bits. */
-    char name[OFP10_MAX_PORT_NAME_LEN]; /* Null-terminated */
+    char name[OFP_MAX_PORT_NAME_LEN]; /* Null-terminated */
 
     ovs_be32 config;        /* Bitmap of OFPPC_* flags. */
     ovs_be32 state;         /* Bitmap of OFPPS_* and OFPPS11_* flags. */
diff --git a/include/openflow/openflow-1.4.h b/include/openflow/openflow-1.4.h
index 9399950b2837..2bfa16b632d9 100644
--- a/include/openflow/openflow-1.4.h
+++ b/include/openflow/openflow-1.4.h
@@ -80,7 +80,7 @@ struct ofp14_port {
     uint8_t pad[2];
     struct eth_addr hw_addr;
     uint8_t pad2[2];                  /* Align to 64 bits. */
-    char name[OFP10_MAX_PORT_NAME_LEN]; /* Null-terminated */
+    char name[OFP_MAX_PORT_NAME_LEN]; /* Null-terminated */
 
     ovs_be32 config;        /* Bitmap of OFPPC_* flags. */
     ovs_be32 state;         /* Bitmap of OFPPS_* flags. */
diff --git a/include/openflow/openflow-1.6.h b/include/openflow/openflow-1.6.h
deleted file mode 100644
index 13c0b7bd5037..000000000000
--- a/include/openflow/openflow-1.6.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (c) 2008 The Board of Trustees of The Leland Stanford
- * Junior University
- * Copyright (c) 2011, 2013, 2014 Open Networking Foundation
- *
- * We are making the OpenFlow specification and associated documentation
- * (Software) available for public use and benefit with the expectation
- * that others will use, modify and enhance the Software and contribute
- * those enhancements back to the community. However, since we would
- * like to make the Software available for broadest use, with as few
- * restrictions as possible permission is hereby granted, free of
- * charge, to any person obtaining a copy of this Software to deal in
- * the Software under the copyrights without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * The name and trademarks of copyright holder(s) may NOT be used in
- * advertising or publicity pertaining to the Software or any
- * derivatives without specific, written prior permission.
- */
-
-/*
- * Copyright (c) 2017 Nicira, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef OPENFLOW_16_H
-#define OPENFLOW_16_H 1
-
-#include <openflow/openflow-common.h>
-
-#define OFP16_MAX_PORT_NAME_LEN  64
-
-struct ofp16_port {
-    ovs_be32 port_no;
-    ovs_be16 length;
-    uint8_t pad[2];                   /* Align to 64 bits. */
-    struct eth_addr hw_addr;          /* EUI-48 hardware address. */
-    uint8_t pad2[2];                  /* Align to 64 bits. */
-    struct eth_addr64 hw_addr64;      /* EUI-64 hardware address */
-    char name[OFP16_MAX_PORT_NAME_LEN]; /* Null-terminated */
-
-    ovs_be32 config;        /* Bitmap of OFPPC_* flags. */
-    ovs_be32 state;         /* Bitmap of OFPPS_* flags. */
-
-    /* Followed by 0 or more OFPPDPT14_* properties.  (OpenFlow 1.6 (draft)
-     * defines the same properties as OpenFlow 1.4.) */
-};
-OFP_ASSERT(sizeof(struct ofp16_port) == 96);
-
-struct ofp16_port_mod {
-    ovs_be32 port_no;
-    uint8_t pad[4];              /* Align to 64 bits. */
-    struct eth_addr hw_addr;
-    uint8_t pad2[2];
-    struct eth_addr64 hw_addr64; /* EUI-64 hardware address */
-
-    ovs_be32 config;        /* Bitmap of OFPPC_* flags. */
-    ovs_be32 mask;          /* Bitmap of OFPPC_* flags to be changed. */
-
-    /* Followed by 0 or more OFPPMPT14_* properties.  (OpenFlow 1.6 (draft)
-     * defines the same properties as OpenFlow 1.4.) */
-};
-OFP_ASSERT(sizeof(struct ofp16_port_mod) == 32);
-
-
-#endif /* openflow/openflow-1.6.h */
diff --git a/include/openflow/openflow-common.h b/include/openflow/openflow-common.h
index ea6bb41bc15c..584f20ec179d 100644
--- a/include/openflow/openflow-common.h
+++ b/include/openflow/openflow-common.h
@@ -79,8 +79,7 @@ enum ofp_version {
     OFP12_VERSION = 0x03,
     OFP13_VERSION = 0x04,
     OFP14_VERSION = 0x05,
-    OFP15_VERSION = 0x06,
-    OFP16_VERSION = 0x07
+    OFP15_VERSION = 0x06
 };
 
 /* Vendor (aka experimenter) IDs.
@@ -113,6 +112,7 @@ enum ofp_version {
 #define INTEL_VENDOR_ID 0x0000AA01 /* Intel */
 
 #define OFP_MAX_TABLE_NAME_LEN 32
+#define OFP_MAX_PORT_NAME_LEN  16
 
 #define OFP_OLD_PORT  6633
 #define OFP_PORT  6653
diff --git a/include/openflow/openflow.h b/include/openflow/openflow.h
index fececb5637a3..918613d07c78 100644
--- a/include/openflow/openflow.h
+++ b/include/openflow/openflow.h
@@ -23,6 +23,5 @@
 #include <openflow/openflow-1.3.h>
 #include <openflow/openflow-1.4.h>
 #include <openflow/openflow-1.5.h>
-#include <openflow/openflow-1.6.h>
 
 #endif /* openflow/openflow.h */
diff --git a/include/openvswitch/ofp-errors.h b/include/openvswitch/ofp-errors.h
index 2f00851f1b7a..a3f8142dfb1a 100644
--- a/include/openvswitch/ofp-errors.h
+++ b/include/openvswitch/ofp-errors.h
@@ -803,8 +803,8 @@ enum ofperr {
     /* OF1.5+(17,18).  Scheduled commit time exceeds lower bound. */
     OFPERR_OFPBFC_SCHED_PAST,
 
-    /* NX1.4-1.5(22), OF1.6+(17,19).  In an OFPT_BUNDLE_ADD_MESSAGE, the
-     * OpenFlow version in the inner and outer messages differ. */
+    /* NX1.4-1.5(22).  In an OFPT_BUNDLE_ADD_MESSAGE, the OpenFlow version in
+     * the inner and outer messages differ. */
     OFPERR_OFPBFC_BAD_VERSION,
 
 /* ## ------------------------- ## */
diff --git a/include/openvswitch/ofp-msgs.h b/include/openvswitch/ofp-msgs.h
index ecdb547dec26..8457bc7d0cab 100644
--- a/include/openvswitch/ofp-msgs.h
+++ b/include/openvswitch/ofp-msgs.h
@@ -177,10 +177,8 @@ enum ofpraw {
     OFPRAW_OFPT10_PORT_STATUS,
     /* OFPT 1.1-1.3 (12): struct ofp_port_status, struct ofp11_port. */
     OFPRAW_OFPT11_PORT_STATUS,
-    /* OFPT 1.4-1.5 (12): struct ofp_port_status, struct ofp14_port, uint8_t[8][]. */
+    /* OFPT 1.4+ (12): struct ofp_port_status, struct ofp14_port, uint8_t[8][]. */
     OFPRAW_OFPT14_PORT_STATUS,
-    /* OFPT 1.6+ (12): struct ofp_port_status, struct ofp16_port, uint8_t[8][]. */
-    OFPRAW_OFPT16_PORT_STATUS,
 
     /* OFPT 1.0 (13): struct ofp10_packet_out, uint8_t[]. */
     OFPRAW_OFPT10_PACKET_OUT,
@@ -207,10 +205,8 @@ enum ofpraw {
     OFPRAW_OFPT10_PORT_MOD,
     /* OFPT 1.1-1.3 (16): struct ofp11_port_mod. */
     OFPRAW_OFPT11_PORT_MOD,
-    /* OFPT 1.4-1.5 (16): struct ofp14_port_mod, uint8_t[8][]. */
+    /* OFPT 1.4+ (16): struct ofp14_port_mod, uint8_t[8][]. */
     OFPRAW_OFPT14_PORT_MOD,
-    /* OFPT 1.6+ (16): struct ofp16_port_mod, uint8_t[8][]. */
-    OFPRAW_OFPT16_PORT_MOD,
 
     /* OFPT 1.1-1.3 (17): struct ofp11_table_mod. */
     OFPRAW_OFPT11_TABLE_MOD,
@@ -592,8 +588,7 @@ enum ofptype {
                                   * OFPRAW_NXT_FLOW_REMOVED. */
     OFPTYPE_PORT_STATUS,         /* OFPRAW_OFPT10_PORT_STATUS.
                                   * OFPRAW_OFPT11_PORT_STATUS.
-                                  * OFPRAW_OFPT14_PORT_STATUS.
-                                  * OFPRAW_OFPT16_PORT_STATUS. */
+                                  * OFPRAW_OFPT14_PORT_STATUS. */
 
     /* Controller command messages. */
     OFPTYPE_PACKET_OUT,          /* OFPRAW_OFPT10_PACKET_OUT.
@@ -607,8 +602,7 @@ enum ofptype {
                                   * OFPRAW_OFPT15_GROUP_MOD. */
     OFPTYPE_PORT_MOD,            /* OFPRAW_OFPT10_PORT_MOD.
                                   * OFPRAW_OFPT11_PORT_MOD.
-                                  * OFPRAW_OFPT14_PORT_MOD.
-                                  * OFPRAW_OFPT16_PORT_MOD. */
+                                  * OFPRAW_OFPT14_PORT_MOD. */
     OFPTYPE_TABLE_MOD,           /* OFPRAW_OFPT11_TABLE_MOD.
                                   * OFPRAW_OFPT14_TABLE_MOD. */
 
diff --git a/include/openvswitch/ofp-port.h b/include/openvswitch/ofp-port.h
index f1f36bf9c08a..559770aaada8 100644
--- a/include/openvswitch/ofp-port.h
+++ b/include/openvswitch/ofp-port.h
@@ -90,19 +90,12 @@ enum ofputil_port_state {
 
 void ofputil_port_state_format(struct ds *, enum ofputil_port_state);
 
-/* Abstract ofp10_phy_port, ofp11_port, ofp14_port, or ofp16_port. */
+/* Abstract ofp10_phy_port, ofp11_port, or ofp14_port. */
 struct ofputil_phy_port {
     ofp_port_t port_no;
 
-    /* Hardware addresses.
-     *
-     * Most hardware has a normal 48-bit Ethernet address, in hw_addr.
-     * Some hardware might have a 64-bit address in hw_addr64.
-     * All-bits-0 indicates that a given address is not present. */
     struct eth_addr hw_addr;
-    struct eth_addr64 hw_addr64;
-
-    char name[OFP16_MAX_PORT_NAME_LEN]; /* 64 bytes in OF1.6+, 16 otherwise. */
+    char name[OFP_MAX_PORT_NAME_LEN]; /* 16 bytes. */
     enum ofputil_port_config config;
     enum ofputil_port_state state;
 
@@ -142,7 +135,6 @@ void ofputil_port_status_format(struct ds *,
 struct ofputil_port_mod {
     ofp_port_t port_no;
     struct eth_addr hw_addr;
-    struct eth_addr64 hw_addr64;
     enum ofputil_port_config config;
     enum ofputil_port_config mask;
     enum netdev_features advertise;
diff --git a/include/openvswitch/ofp-protocol.h b/include/openvswitch/ofp-protocol.h
index a351660ac216..3f4e645a3da7 100644
--- a/include/openvswitch/ofp-protocol.h
+++ b/include/openvswitch/ofp-protocol.h
@@ -79,12 +79,10 @@ enum ofputil_protocol {
     OFPUTIL_P_OF13_OXM      = 1 << 6,
     OFPUTIL_P_OF14_OXM      = 1 << 7,
     OFPUTIL_P_OF15_OXM      = 1 << 8,
-    OFPUTIL_P_OF16_OXM      = 1 << 9,
 #define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
                            OFPUTIL_P_OF13_OXM | \
                            OFPUTIL_P_OF14_OXM | \
-                           OFPUTIL_P_OF15_OXM | \
-                           OFPUTIL_P_OF16_OXM)
+                           OFPUTIL_P_OF15_OXM)
 
 #define OFPUTIL_P_NXM_OF11_UP (OFPUTIL_P_OF10_NXM_ANY | OFPUTIL_P_OF11_STD | \
                                OFPUTIL_P_ANY_OXM)
@@ -96,8 +94,7 @@ enum ofputil_protocol {
 #define OFPUTIL_P_OF12_UP (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_UP)
 #define OFPUTIL_P_OF13_UP (OFPUTIL_P_OF13_OXM | OFPUTIL_P_OF14_UP)
 #define OFPUTIL_P_OF14_UP (OFPUTIL_P_OF14_OXM | OFPUTIL_P_OF15_UP)
-#define OFPUTIL_P_OF15_UP (OFPUTIL_P_OF15_OXM | OFPUTIL_P_OF16_UP)
-#define OFPUTIL_P_OF16_UP OFPUTIL_P_OF16_OXM
+#define OFPUTIL_P_OF15_UP OFPUTIL_P_OF15_OXM
 
     /* All protocols. */
 #define OFPUTIL_P_ANY ((1 << 10) - 1)
diff --git a/lib/meta-flow.xml b/lib/meta-flow.xml
index 0b5c1d008737..37b129696a51 100644
--- a/lib/meta-flow.xml
+++ b/lib/meta-flow.xml
@@ -3720,9 +3720,7 @@ r r c c c.
       label at any given time.  To match on the second label, one must first
       ``pop'' the outer label and advance to another OpenFlow table, where the
       inner label may be matched.  To match on the third label, one must pop
-      the two outer labels, and so on.  The Open Networking Foundation is
-      considering support for directly matching on multiple MPLS labels for
-      OpenFlow 1.6.<!-- XXX add EXT-* link -->
+      the two outer labels, and so on.
     </p>
 
     <h2>MPLS Inner Protocol</h2>
diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
index 96e39d6c6c9c..1c361ab930db 100644
--- a/lib/ofp-actions.c
+++ b/lib/ofp-actions.c
@@ -8632,7 +8632,6 @@ get_ofpact_map(enum ofp_version version)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
     default:
         return of12;
     }
diff --git a/lib/ofp-bundle.c b/lib/ofp-bundle.c
index 1f65fe54cacf..0161c2bc6152 100644
--- a/lib/ofp-bundle.c
+++ b/lib/ofp-bundle.c
@@ -112,7 +112,6 @@ ofputil_encode_bundle_ctrl_request(enum ofp_version ofp_version,
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         request = ofpraw_alloc(ofp_version == OFP13_VERSION
                                ? OFPRAW_ONFT13_BUNDLE_CONTROL
                                : OFPRAW_OFPT14_BUNDLE_CONTROL, ofp_version, 0);
diff --git a/lib/ofp-errors.c b/lib/ofp-errors.c
index 3ca09cb6886c..35191abf16dd 100644
--- a/lib/ofp-errors.c
+++ b/lib/ofp-errors.c
@@ -56,8 +56,6 @@ ofperr_domain_from_version(enum ofp_version version)
         return &ofperr_of14;
     case OFP15_VERSION:
         return &ofperr_of15;
-    case OFP16_VERSION:
-        return &ofperr_of16;
     default:
         return NULL;
     }
diff --git a/lib/ofp-flow.c b/lib/ofp-flow.c
index f6b3f556eadf..c45afd204f80 100644
--- a/lib/ofp-flow.c
+++ b/lib/ofp-flow.c
@@ -384,8 +384,7 @@ ofputil_encode_flow_mod(const struct ofputil_flow_mod *fm,
     case OFPUTIL_P_OF12_OXM:
     case OFPUTIL_P_OF13_OXM:
     case OFPUTIL_P_OF14_OXM:
-    case OFPUTIL_P_OF15_OXM:
-    case OFPUTIL_P_OF16_OXM: {
+    case OFPUTIL_P_OF15_OXM: {
         struct ofp11_flow_mod *ofm;
         int tailroom;
 
@@ -746,8 +745,7 @@ ofputil_encode_flow_stats_request(const struct ofputil_flow_stats_request *fsr,
     case OFPUTIL_P_OF12_OXM:
     case OFPUTIL_P_OF13_OXM:
     case OFPUTIL_P_OF14_OXM:
-    case OFPUTIL_P_OF15_OXM:
-    case OFPUTIL_P_OF16_OXM: {
+    case OFPUTIL_P_OF15_OXM: {
         struct ofp11_flow_stats_request *ofsr;
 
         if (protocol > OFPUTIL_P_OF14_OXM) {
diff --git a/lib/ofp-group.c b/lib/ofp-group.c
index 6857164f0163..da5ff5848ccf 100644
--- a/lib/ofp-group.c
+++ b/lib/ofp-group.c
@@ -274,8 +274,7 @@ ofputil_encode_group_desc_request(enum ofp_version ofp_version,
                                ofp_version, 0);
         break;
     case OFP10_VERSION:
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
         struct ofp15_group_desc_request *req;
         request = ofpraw_alloc((ofp_version == OFP10_VERSION
                                 ? OFPRAW_NXST_GROUP_DESC_REQUEST
@@ -369,8 +368,7 @@ ofputil_append_group_stats(struct ovs_list *replies,
     case OFP10_VERSION:
     case OFP13_VERSION:
     case OFP14_VERSION:
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
             struct ofp13_group_stats *gs13;
 
             length = sizeof *gs13 + bucket_counter_size;
@@ -1306,7 +1304,6 @@ ofputil_append_group_desc_reply(const struct ofputil_group_desc *gds,
 
     case OFP10_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         ofputil_append_ofp15_group_desc_reply(gds, buckets, replies, version);
         break;
 
@@ -1780,7 +1777,6 @@ ofputil_decode_group_desc_reply(struct ofputil_group_desc *gd,
 
     case OFP10_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return ofputil_decode_ofp15_group_desc_reply(gd, msg, version);
 
     default:
@@ -2117,7 +2113,6 @@ ofputil_encode_group_mod(enum ofp_version ofp_version,
 
     case OFP10_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return ofputil_encode_ofp15_group_mod(ofp_version, gm, group_existed);
 
     default:
@@ -2304,7 +2299,6 @@ ofputil_decode_group_mod(const struct ofp_header *oh,
 
     case OFP10_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         err = ofputil_pull_ofp15_group_mod(&msg, ofp_version, gm);
         break;
 
diff --git a/lib/ofp-match.c b/lib/ofp-match.c
index e83fa9086b8d..2ec28f8036c0 100644
--- a/lib/ofp-match.c
+++ b/lib/ofp-match.c
@@ -564,7 +564,6 @@ ofputil_match_typical_len(enum ofputil_protocol protocol)
     case OFPUTIL_P_OF13_OXM:
     case OFPUTIL_P_OF14_OXM:
     case OFPUTIL_P_OF15_OXM:
-    case OFPUTIL_P_OF16_OXM:
         return NXM_TYPICAL_LEN;
 
     default:
@@ -607,7 +606,6 @@ ofputil_put_ofp11_match(struct ofpbuf *b, const struct match *match,
     case OFPUTIL_P_OF13_OXM:
     case OFPUTIL_P_OF14_OXM:
     case OFPUTIL_P_OF15_OXM:
-    case OFPUTIL_P_OF16_OXM:
         return oxm_put_match(b, match,
                              ofputil_protocol_to_ofp_version(protocol));
     }
diff --git a/lib/ofp-monitor.c b/lib/ofp-monitor.c
index 4c15d11e8337..aeebd7e9ccf5 100644
--- a/lib/ofp-monitor.c
+++ b/lib/ofp-monitor.c
@@ -218,8 +218,7 @@ ofputil_encode_flow_removed(const struct ofputil_flow_removed *fr,
         ofputil_put_ofp11_match(msg, &fr->match, protocol);
         break;
     }
-    case OFPUTIL_P_OF15_OXM:
-    case OFPUTIL_P_OF16_OXM: {
+    case OFPUTIL_P_OF15_OXM: {
         struct ofp15_flow_removed *ofr;
 
         msg = ofpraw_alloc_xid(OFPRAW_OFPT15_FLOW_REMOVED,
diff --git a/lib/ofp-msgs.c b/lib/ofp-msgs.c
index ddea4f25ef42..fec54f75f88b 100644
--- a/lib/ofp-msgs.c
+++ b/lib/ofp-msgs.c
@@ -327,7 +327,6 @@ ofp_is_stat_request(enum ofp_version version, uint8_t type)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return type == OFPT11_STATS_REQUEST;
     }
 
@@ -345,7 +344,6 @@ ofp_is_stat_reply(enum ofp_version version, uint8_t type)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return type == OFPT11_STATS_REPLY;
     }
 
@@ -387,7 +385,6 @@ ofphdrs_len(const struct ofphdrs *hdrs)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         if (hdrs->type == OFPT11_STATS_REQUEST ||
             hdrs->type == OFPT11_STATS_REPLY) {
             return (hdrs->stat == OFPST_VENDOR
@@ -807,7 +804,6 @@ ofpraw_stats_request_to_reply(enum ofpraw raw, uint8_t version)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         ovs_assert(hdrs.type == OFPT11_STATS_REQUEST);
         hdrs.type = OFPT11_STATS_REPLY;
         break;
@@ -1038,7 +1034,6 @@ ofpmp_flags__(const struct ofp_header *oh)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return &((struct ofp11_stats_msg *) oh)->flags;
     default:
         OVS_NOT_REACHED();
diff --git a/lib/ofp-packet.c b/lib/ofp-packet.c
index aa3417c9b051..a1ffe17de5f6 100644
--- a/lib/ofp-packet.c
+++ b/lib/ofp-packet.c
@@ -667,7 +667,6 @@ ofputil_encode_packet_in_private(const struct ofputil_packet_in_private *pin,
         case OFPUTIL_P_OF13_OXM:
         case OFPUTIL_P_OF14_OXM:
         case OFPUTIL_P_OF15_OXM:
-        case OFPUTIL_P_OF16_OXM:
             msg = ofputil_encode_ofp12_packet_in(&pin->base, version);
             break;
 
@@ -1193,8 +1192,7 @@ ofputil_encode_packet_out(const struct ofputil_packet_out *po,
         break;
     }
 
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
         struct ofp15_packet_out *opo;
         size_t len;
 
diff --git a/lib/ofp-port.c b/lib/ofp-port.c
index 15dac4f0ac2e..16d5874885e8 100644
--- a/lib/ofp-port.c
+++ b/lib/ofp-port.c
@@ -165,7 +165,7 @@ ofputil_port_from_string(const char *s,
                       "be translated to %u when talking to an OF1.1 or "
                       "later controller", port32, port32 + OFPP11_OFFSET);
         } else if (port32 <= ofp_to_u16(OFPP_LAST_RESV)) {
-            char name[OFP10_MAX_PORT_NAME_LEN];
+            char name[OFP_MAX_PORT_NAME_LEN];
 
             ofputil_port_to_string(u16_to_ofp(port32), NULL,
                                    name, sizeof name);
@@ -553,34 +553,6 @@ ofputil_pull_ofp14_port(struct ofputil_phy_port *pp, struct ofpbuf *msg)
     return ofputil_pull_ofp14_port_properties(ofpbuf_pull(msg, len), len, pp);
 }
 
-static enum ofperr
-ofputil_pull_ofp16_port(struct ofputil_phy_port *pp, struct ofpbuf *msg)
-{
-    const struct ofp16_port *op = ofpbuf_try_pull(msg, sizeof *op);
-    if (!op) {
-        return OFPERR_OFPBRC_BAD_LEN;
-    }
-
-    size_t len = ntohs(op->length);
-    if (len < sizeof *op || len - sizeof *op > msg->size) {
-        return OFPERR_OFPBRC_BAD_LEN;
-    }
-    len -= sizeof *op;
-
-    enum ofperr error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
-    if (error) {
-        return error;
-    }
-    pp->hw_addr = op->hw_addr;
-    pp->hw_addr64 = op->hw_addr64;
-    ovs_strlcpy_arrays(pp->name, op->name);
-
-    pp->config = ntohl(op->config) & OFPPC11_ALL;
-    pp->state = ntohl(op->state) & OFPPS11_ALL;
-
-    return ofputil_pull_ofp14_port_properties(ofpbuf_pull(msg, len), len, pp);
-}
-
 static void
 ofputil_encode_ofp10_phy_port(const struct ofputil_phy_port *pp,
                               struct ofp10_phy_port *opp)
@@ -655,27 +627,6 @@ ofputil_put_ofp14_port(const struct ofputil_phy_port *pp, struct ofpbuf *b)
     ofputil_encode_ofp14_port_ethernet_prop(pp, eth);
 }
 
-static void
-ofputil_put_ofp16_port(const struct ofputil_phy_port *pp, struct ofpbuf *b)
-{
-    struct ofp16_port *op;
-    struct ofp14_port_desc_prop_ethernet *eth;
-
-    ofpbuf_prealloc_tailroom(b, sizeof *op + sizeof *eth);
-
-    op = ofpbuf_put_zeros(b, sizeof *op);
-    op->port_no = ofputil_port_to_ofp11(pp->port_no);
-    op->length = htons(sizeof *op + sizeof *eth);
-    op->hw_addr = pp->hw_addr;
-    op->hw_addr64 = pp->hw_addr64;
-    ovs_strlcpy_arrays(op->name, pp->name);
-    op->config = htonl(pp->config & OFPPC11_ALL);
-    op->state = htonl(pp->state & OFPPS11_ALL);
-
-    eth = ofpprop_put_zeros(b, OFPPDPT14_ETHERNET, sizeof *eth);
-    ofputil_encode_ofp14_port_ethernet_prop(pp, eth);
-}
-
 void
 ofputil_put_phy_port(enum ofp_version ofp_version,
                      const struct ofputil_phy_port *pp, struct ofpbuf *b)
@@ -699,9 +650,6 @@ ofputil_put_phy_port(enum ofp_version ofp_version,
     case OFP15_VERSION:
         ofputil_put_ofp14_port(pp, b);
         break;
-    case OFP16_VERSION:
-        ofputil_put_ofp16_port(pp, b);
-        break;
 
     default:
         OVS_NOT_REACHED();
@@ -743,8 +691,7 @@ ofputil_encode_port_desc_stats_request(enum ofp_version ofp_version,
         request = ofpraw_alloc(OFPRAW_OFPST10_PORT_DESC_REQUEST,
                                ofp_version, 0);
         break;
-    case OFP15_VERSION:
-    case OFP16_VERSION:{
+    case OFP15_VERSION: {
         struct ofp15_port_desc_request *req;
         request = ofpraw_alloc(OFPRAW_OFPST15_PORT_DESC_REQUEST,
                                ofp_version, 0);
@@ -795,8 +742,6 @@ ofputil_pull_phy_port(enum ofp_version ofp_version, struct ofpbuf *b,
     case OFP14_VERSION:
     case OFP15_VERSION:
         return b->size ? ofputil_pull_ofp14_port(pp, b) : EOF;
-    case OFP16_VERSION:
-        return b->size ? ofputil_pull_ofp16_port(pp, b) : EOF;
     default:
         OVS_NOT_REACHED();
     }
@@ -821,11 +766,6 @@ ofputil_phy_port_format(struct ds *s, const struct ofputil_phy_port *port)
     ds_put_format(s, "(%s): addr:"ETH_ADDR_FMT"\n",
                   name, ETH_ADDR_ARGS(port->hw_addr));
 
-    if (!eth_addr64_is_zero(port->hw_addr64)) {
-        ds_put_format(s, "     addr64: "ETH_ADDR64_FMT"\n",
-                      ETH_ADDR64_ARGS(port->hw_addr64));
-    }
-
     ds_put_cstr(s, "     config:     ");
     ofputil_port_config_format(s, port->config);
 
@@ -952,10 +892,6 @@ ofputil_encode_port_status(const struct ofputil_port_status *ps,
         raw = OFPRAW_OFPT14_PORT_STATUS;
         break;
 
-    case OFP16_VERSION:
-        raw = OFPRAW_OFPT16_PORT_STATUS;
-        break;
-
     default:
         OVS_NOT_REACHED();
     }
@@ -1078,24 +1014,6 @@ ofputil_decode_ofp14_port_mod(struct ofpbuf *b, bool loose,
     return ofputil_decode_ofp14_port_mod_properties(b, loose, pm);
 }
 
-static enum ofperr
-ofputil_decode_ofp16_port_mod(struct ofpbuf *b, bool loose,
-                              struct ofputil_port_mod *pm)
-{
-    const struct ofp16_port_mod *opm = ofpbuf_pull(b, sizeof *opm);
-    enum ofperr error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
-    if (error) {
-        return error;
-    }
-
-    pm->hw_addr = opm->hw_addr;
-    pm->hw_addr64 = opm->hw_addr64;
-    pm->config = ntohl(opm->config) & OFPPC11_ALL;
-    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
-
-    return ofputil_decode_ofp14_port_mod_properties(b, loose, pm);
-}
-
 /* Decodes the OpenFlow "port mod" message in '*oh' into an abstract form in
  * '*pm'.  Returns 0 if successful, otherwise an OFPERR_* value. */
 enum ofperr
@@ -1114,8 +1032,6 @@ ofputil_decode_port_mod(const struct ofp_header *oh,
         error = ofputil_decode_ofp11_port_mod(b.data, pm);
     } else if (raw == OFPRAW_OFPT14_PORT_MOD) {
         error = ofputil_decode_ofp14_port_mod(&b, loose, pm);
-    } else if (raw == OFPRAW_OFPT16_PORT_MOD) {
-        error = ofputil_decode_ofp16_port_mod(&b, loose, pm);
     } else {
         error = OFPERR_OFPBRC_BAD_TYPE;
     }
@@ -1179,23 +1095,6 @@ ofputil_encode_port_mod(const struct ofputil_port_mod *pm,
         }
         break;
     }
-    case OFP16_VERSION: {
-        struct ofp16_port_mod *opm;
-
-        b = ofpraw_alloc(OFPRAW_OFPT16_PORT_MOD, ofp_version, 0);
-        opm = ofpbuf_put_zeros(b, sizeof *opm);
-        opm->port_no = ofputil_port_to_ofp11(pm->port_no);
-        opm->hw_addr = pm->hw_addr;
-        opm->hw_addr64 = pm->hw_addr64;
-        opm->config = htonl(pm->config & OFPPC11_ALL);
-        opm->mask = htonl(pm->mask & OFPPC11_ALL);
-
-        if (pm->advertise) {
-            ofpprop_put_be32(b, OFPPMPT14_ETHERNET,
-                             netdev_port_features_to_ofp11(pm->advertise));
-        }
-        break;
-    }
     default:
         OVS_NOT_REACHED();
     }
@@ -1211,10 +1110,6 @@ ofputil_port_mod_format(struct ds *s, const struct ofputil_port_mod *pm,
     ofputil_format_port(pm->port_no, port_map, s);
     ds_put_format(s, ": addr:"ETH_ADDR_FMT"\n",
                   ETH_ADDR_ARGS(pm->hw_addr));
-    if (!eth_addr64_is_zero(pm->hw_addr64)) {
-        ds_put_format(s, "     addr64: "ETH_ADDR64_FMT"\n",
-                      ETH_ADDR64_ARGS(pm->hw_addr64));
-    }
 
     ds_put_cstr(s, "     config: ");
     ofputil_port_config_format(s, pm->config);
@@ -1251,8 +1146,7 @@ ofputil_encode_dump_ports_request(enum ofp_version ofp_version,
     case OFP12_VERSION:
     case OFP13_VERSION:
     case OFP14_VERSION:
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
         struct ofp11_port_stats_request *req;
         request = ofpraw_alloc(OFPRAW_OFPST11_PORT_REQUEST, ofp_version, 0);
         req = ofpbuf_put_zeros(request, sizeof *req);
@@ -1462,7 +1356,6 @@ ofputil_append_port_stat(struct ovs_list *replies,
 
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         ofputil_append_ofp14_port_stats(ops, replies);
         break;
 
@@ -1941,7 +1834,6 @@ ofputil_decode_port_stats_request(const struct ofp_header *request,
                                   ofp_port_t *ofp10_port)
 {
     switch ((enum ofp_version)request->version) {
-    case OFP16_VERSION:
     case OFP15_VERSION:
     case OFP14_VERSION:
     case OFP13_VERSION:
diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 9c8851590eae..b0facbf9f936 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
@@ -807,9 +807,6 @@ ofp_print_version(const struct ofp_header *oh,
     case OFP15_VERSION:
         ds_put_cstr(string, " (OF1.5)");
         break;
-    case OFP16_VERSION:
-        ds_put_cstr(string, " (OF1.6)");
-        break;
     default:
         ds_put_format(string, " (OF 0x%02"PRIx8")", oh->version);
         break;
diff --git a/lib/ofp-protocol.c b/lib/ofp-protocol.c
index a8f3b9685a45..4d2dd6268ae9 100644
--- a/lib/ofp-protocol.c
+++ b/lib/ofp-protocol.c
@@ -46,7 +46,6 @@ static const struct proto_abbrev proto_abbrevs[] = {
 #define N_PROTO_ABBREVS ARRAY_SIZE(proto_abbrevs)
 
 enum ofputil_protocol ofputil_flow_dump_protocols[] = {
-    OFPUTIL_P_OF16_OXM,
     OFPUTIL_P_OF15_OXM,
     OFPUTIL_P_OF14_OXM,
     OFPUTIL_P_OF13_OXM,
@@ -77,8 +76,6 @@ ofputil_protocols_from_ofp_version(enum ofp_version version)
         return OFPUTIL_P_OF14_OXM;
     case OFP15_VERSION:
         return OFPUTIL_P_OF15_OXM;
-    case OFP16_VERSION:
-        return OFPUTIL_P_OF16_OXM;
     default:
         return 0;
     }
@@ -116,8 +113,6 @@ ofputil_protocol_to_ofp_version(enum ofputil_protocol protocol)
         return OFP14_VERSION;
     case OFPUTIL_P_OF15_OXM:
         return OFP15_VERSION;
-    case OFPUTIL_P_OF16_OXM:
-        return OFP16_VERSION;
     }
 
     OVS_NOT_REACHED();
@@ -200,9 +195,6 @@ ofputil_protocol_set_tid(enum ofputil_protocol protocol, bool enable)
     case OFPUTIL_P_OF15_OXM:
         return OFPUTIL_P_OF15_OXM;
 
-    case OFPUTIL_P_OF16_OXM:
-        return OFPUTIL_P_OF16_OXM;
-
     default:
         OVS_NOT_REACHED();
     }
@@ -249,9 +241,6 @@ ofputil_protocol_set_base(enum ofputil_protocol cur,
     case OFPUTIL_P_OF15_OXM:
         return ofputil_protocol_set_tid(OFPUTIL_P_OF15_OXM, tid);
 
-    case OFPUTIL_P_OF16_OXM:
-        return ofputil_protocol_set_tid(OFPUTIL_P_OF16_OXM, tid);
-
     default:
         OVS_NOT_REACHED();
     }
@@ -294,9 +283,6 @@ ofputil_protocol_to_string(enum ofputil_protocol protocol)
 
     case OFPUTIL_P_OF15_OXM:
         return "OXM-OpenFlow15";
-
-    case OFPUTIL_P_OF16_OXM:
-        return "OXM-OpenFlow16";
     }
 
     /* Check abbreviations. */
@@ -438,9 +424,6 @@ ofputil_version_from_string(const char *s)
     if (!strcasecmp(s, "OpenFlow15")) {
         return OFP15_VERSION;
     }
-    if (!strcasecmp(s, "OpenFlow16")) {
-        return OFP16_VERSION;
-    }
     return 0;
 }
 
@@ -515,8 +498,6 @@ ofputil_version_to_string(enum ofp_version ofp_version)
         return "OpenFlow14";
     case OFP15_VERSION:
         return "OpenFlow15";
-    case OFP16_VERSION:
-        return "OpenFlow16";
     default:
         OVS_NOT_REACHED();
     }
@@ -599,7 +580,6 @@ ofputil_encode_set_protocol(enum ofputil_protocol current,
         case OFPUTIL_P_OF13_OXM:
         case OFPUTIL_P_OF14_OXM:
         case OFPUTIL_P_OF15_OXM:
-        case OFPUTIL_P_OF16_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();
diff --git a/lib/ofp-queue.c b/lib/ofp-queue.c
index 1c939878ec3e..efb8a250af6e 100644
--- a/lib/ofp-queue.c
+++ b/lib/ofp-queue.c
@@ -542,7 +542,6 @@ ofputil_decode_queue_stats_request(const struct ofp_header *request,
                                    struct ofputil_queue_stats_request *oqsr)
 {
     switch ((enum ofp_version)request->version) {
-    case OFP16_VERSION:
     case OFP15_VERSION:
     case OFP14_VERSION:
     case OFP13_VERSION:
@@ -584,8 +583,7 @@ ofputil_encode_queue_stats_request(
     case OFP12_VERSION:
     case OFP13_VERSION:
     case OFP14_VERSION:
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
         struct ofp11_queue_stats_request *req;
         request = ofpraw_alloc(OFPRAW_OFPST11_QUEUE_REQUEST, ofp_version, 0);
         req = ofpbuf_put_zeros(request, sizeof *req);
@@ -851,8 +849,7 @@ ofputil_append_queue_stat(struct ovs_list *replies,
     }
 
     case OFP14_VERSION:
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
         struct ofp14_queue_stats *reply = ofpmp_append(replies, sizeof *reply);
         ofputil_queue_stats_to_ofp14(oqs, reply);
         break;
diff --git a/lib/ofp-switch.c b/lib/ofp-switch.c
index 1fbfabed5590..2f7a1cad299a 100644
--- a/lib/ofp-switch.c
+++ b/lib/ofp-switch.c
@@ -52,7 +52,6 @@ ofputil_capabilities_mask(enum ofp_version ofp_version)
         return OFPC_COMMON | OFPC12_PORT_BLOCKED;
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return OFPC_COMMON | OFPC12_PORT_BLOCKED | OFPC14_BUNDLES
             | OFPC14_FLOW_MONITORING;
     default:
@@ -168,7 +167,6 @@ ofputil_encode_switch_features(const struct ofputil_switch_features *features,
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         raw = OFPRAW_OFPT13_FEATURES_REPLY;
         break;
     default:
@@ -193,7 +191,6 @@ ofputil_encode_switch_features(const struct ofputil_switch_features *features,
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         osf->auxiliary_id = features->auxiliary_id;
         /* fall through */
     case OFP11_VERSION:
diff --git a/lib/ofp-table.c b/lib/ofp-table.c
index 88a1533fc624..d2014f087509 100644
--- a/lib/ofp-table.c
+++ b/lib/ofp-table.c
@@ -584,7 +584,6 @@ ofputil_encode_table_features_request(enum ofp_version ofp_version)
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         request = ofpraw_alloc(OFPRAW_OFPST13_TABLE_FEATURES_REQUEST,
                                ofp_version, 0);
         break;
@@ -999,7 +998,6 @@ ofputil_encode_table_config(enum ofputil_table_miss miss,
 
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         /* OpenFlow 1.4 introduced OFPTC14_EVICTION and
          * OFPTC14_VACANCY_EVENTS. */
         if (eviction == OFPUTIL_TABLE_EVICTION_ON) {
@@ -1136,8 +1134,7 @@ ofputil_encode_table_mod(const struct ofputil_table_mod *tm,
         break;
     }
     case OFP14_VERSION:
-    case OFP15_VERSION:
-    case OFP16_VERSION: {
+    case OFP15_VERSION: {
         struct ofp14_table_mod *otm;
 
         b = ofpraw_alloc(OFPRAW_OFPT14_TABLE_MOD, ofp_version, 0);
@@ -1954,7 +1951,6 @@ ofputil_append_table_stats_reply(struct ofpbuf *reply,
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         ofputil_put_ofp13_table_stats(stats, reply);
         break;
 
@@ -2125,7 +2121,6 @@ ofputil_decode_table_stats_reply(struct ofpbuf *msg,
     case OFP13_VERSION:
     case OFP14_VERSION:
     case OFP15_VERSION:
-    case OFP16_VERSION:
         return ofputil_decode_ofp13_table_stats(msg, stats, features);
 
     default:
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index ebbee077c81e..a324ceeeabc7 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -219,7 +219,6 @@ ofputil_encode_barrier_request(enum ofp_version ofp_version)
     enum ofpraw type;
 
     switch (ofp_version) {
-    case OFP16_VERSION:
     case OFP15_VERSION:
     case OFP14_VERSION:
     case OFP13_VERSION:
diff --git a/lib/ofp-version.man b/lib/ofp-version.man
index 39e4477d1403..0e5391db72ba 100644
--- a/lib/ofp-version.man
+++ b/lib/ofp-version.man
@@ -36,7 +36,3 @@ 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
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 839fddd99fbe..241d15fd5419 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -5146,7 +5146,7 @@ xlate_output_trunc_action(struct xlate_ctx *ctx,
 {
     bool support_trunc = ctx->xbridge->support.trunc;
     struct ovs_action_trunc *trunc;
-    char name[OFP10_MAX_PORT_NAME_LEN];
+    char name[OFP_MAX_PORT_NAME_LEN];
 
     switch (port) {
     case OFPP_TABLE:
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 14fe6fc8a830..3d83d4b66305 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -5223,7 +5223,7 @@ ofproto_unixctl_fdb_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
     ovs_rwlock_rdlock(&ofproto->ml->rwlock);
     LIST_FOR_EACH (e, lru_node, &ofproto->ml->lrus) {
         struct ofbundle *bundle = mac_entry_get_port(ofproto->ml, e);
-        char name[OFP10_MAX_PORT_NAME_LEN];
+        char name[OFP_MAX_PORT_NAME_LEN];
 
         ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port,
                                NULL, name, sizeof name);
@@ -5327,7 +5327,7 @@ ofproto_unixctl_mcast_snooping_show(struct unixctl_conn *conn,
     ovs_rwlock_rdlock(&ofproto->ms->rwlock);
     LIST_FOR_EACH (grp, group_node, &ofproto->ms->group_lru) {
         LIST_FOR_EACH(b, bundle_node, &grp->bundle_lru) {
-            char name[OFP10_MAX_PORT_NAME_LEN];
+            char name[OFP_MAX_PORT_NAME_LEN];
 
             bundle = b->port;
             ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port,
@@ -5341,7 +5341,7 @@ ofproto_unixctl_mcast_snooping_show(struct unixctl_conn *conn,
 
     /* ports connected to multicast routers */
     LIST_FOR_EACH(mrouter, mrouter_node, &ofproto->ms->mrouter_lru) {
-        char name[OFP10_MAX_PORT_NAME_LEN];
+        char name[OFP_MAX_PORT_NAME_LEN];
 
         bundle = mrouter->port;
         ofputil_port_to_string(ofbundle_get_a_port(bundle)->up.ofp_port,
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index d63d47625215..c0bc46a3566e 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -2357,7 +2357,6 @@ ofport_open(struct ofproto *ofproto,
     }
     pp->port_no = ofproto_port->ofp_port;
     netdev_get_etheraddr(netdev, &pp->hw_addr);
-    pp->hw_addr64 = eth_addr64_zero;
     ovs_strlcpy(pp->name, ofproto_port->name, sizeof pp->name);
     netdev_get_flags(netdev, &flags);
     pp->config = flags & NETDEV_UP ? 0 : OFPUTIL_PC_PORT_DOWN;
@@ -2378,7 +2377,6 @@ ofport_equal(const struct ofputil_phy_port *a,
              const struct ofputil_phy_port *b)
 {
     return (eth_addr_equals(a->hw_addr, b->hw_addr)
-            && eth_addr64_equals(a->hw_addr64, b->hw_addr64)
             && a->state == b->state
             && a->config == b->config
             && a->curr == b->curr
@@ -3689,8 +3687,7 @@ port_mod_start(struct ofconn *ofconn, struct ofputil_port_mod *pm,
     if (!*port) {
         return OFPERR_OFPPMFC_BAD_PORT;
     }
-    if (!eth_addr_equals((*port)->pp.hw_addr, pm->hw_addr) ||
-        !eth_addr64_equals((*port)->pp.hw_addr64, pm->hw_addr64)) {
+    if (!eth_addr_equals((*port)->pp.hw_addr, pm->hw_addr)) {
         return OFPERR_OFPPMFC_BAD_HW_ADDR;
     }
     return 0;
diff --git a/tests/ofp-errors.at b/tests/ofp-errors.at
index 690c4a6fb776..da3aca3af0f5 100644
--- a/tests/ofp-errors.at
+++ b/tests/ofp-errors.at
@@ -102,7 +102,6 @@ OpenFlow 1.2: vendor 0, type 3, code 5
 OpenFlow 1.3: vendor 0, type 3, code 5
 OpenFlow 1.4: vendor 0, type 3, code 5
 OpenFlow 1.5: vendor 0, type 3, code 5
-OpenFlow 1.6: vendor 0, type 3, code 5
 ])
 AT_CHECK([ovs-ofctl print-error OFPBIC_BAD_EXP_TYPE], [0], [dnl
 OpenFlow 1.1: vendor 0, type 3, code 5
@@ -110,7 +109,6 @@ OpenFlow 1.2: vendor 0, type 3, code 6
 OpenFlow 1.3: vendor 0, type 3, code 6
 OpenFlow 1.4: vendor 0, type 3, code 6
 OpenFlow 1.5: vendor 0, type 3, code 6
-OpenFlow 1.6: vendor 0, type 3, code 6
 ])
 AT_CLEANUP
 
diff --git a/tests/ofp-print.at b/tests/ofp-print.at
index e0b7cfb05e53..fe8ccdf3077f 100644
--- a/tests/ofp-print.at
+++ b/tests/ofp-print.at
@@ -711,32 +711,6 @@ OFPT_PORT_STATUS (OF1.4) (xid=0x0): MOD: 3(eth0): addr:50:54:00:00:00:01
 ])
 AT_CLEANUP
 
-AT_SETUP([OFPT_PORT_STATUS - OF1.6])
-AT_KEYWORDS([ofp-print])
-AT_CHECK([ovs-ofctl ofp-print "\
-07 0c 00 90 00 00 00 00 02 00 00 00 00 00 00 00 \
-\
-00 00 00 03 00 80 00 03 50 54 00 00 00 01 00 00 \
-50 54 00 ff fe 00 00 01 \
-65 74 68 30 00 00 00 00 00 00 00 00 00 00 00 00 \
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \
-00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 \
-00 00 20 08 00 00 28 0f 00 00 28 0f 00 00 00 00 \
-00 01 86 a0 00 01 86 a0 \
-"], [0], [dnl
-OFPT_PORT_STATUS (OF1.6) (xid=0x0): MOD: 3(eth0): addr:50:54:00:00:00:01
-     addr64: 50:54:00:ff:fe:00:00:01
-     config:     0
-     state:      0
-     current:    100MB-FD AUTO_NEG
-     advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
-     supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
-     speed: 100 Mbps now, 100 Mbps max
-])
-AT_CLEANUP
-
 AT_SETUP([OFPT_PACKET_OUT - OF1.0])
 AT_KEYWORDS([ofp-print])
 AT_CHECK([ovs-ofctl ofp-print "\
@@ -1234,21 +1208,6 @@ OFPT_PORT_MOD (OF1.4) (xid=0x3): port: 3: addr:50:54:00:00:00:01
 ])
 AT_CLEANUP
 
-AT_SETUP([OFPT_PORT_MOD - OF1.6])
-AT_KEYWORDS([ofp-print])
-AT_CHECK([ovs-ofctl ofp-print "\
-07 10 00 30 00 00 00 03 00 00 00 03 00 03 00 00 \
-50 54 00 00 00 01 00 00 50 54 00 ff fe 00 00 01 \
-00 00 00 01 00 00 00 01 00 00 00 08 00 00 00 01
-" 3], [0], [dnl
-OFPT_PORT_MOD (OF1.6) (xid=0x3): port: 3: addr:50:54:00:00:00:01
-     addr64: 50:54:00:ff:fe:00:00:01
-     config: PORT_DOWN
-     mask:   PORT_DOWN
-     advertise: 10MB-HD
-])
-AT_CLEANUP
-
 AT_SETUP([OFPT_TABLE_MOD - OF1.1])
 AT_KEYWORDS([ofp-print])
 AT_CHECK([ovs-ofctl ofp-print "\
diff --git a/tests/ofproto-macros.at b/tests/ofproto-macros.at
index 1ac7351f4e0b..2f33feabc954 100644
--- a/tests/ofproto-macros.at
+++ b/tests/ofproto-macros.at
@@ -434,8 +434,7 @@ add_of_br () {
                           other-config:datapath-id=$dpid \
                           other-config:hwaddr=$mac \
                           protocols="[[OpenFlow10,OpenFlow11,OpenFlow12,\
-                                       OpenFlow13,OpenFlow14,OpenFlow15,\
-                                       OpenFlow16]]" \
+                                       OpenFlow13,OpenFlow14,OpenFlow15]]" \
         -- "$@"
 }
 
diff --git a/tests/ofproto.at b/tests/ofproto.at
index 3021f93bc63f..4c913ca14480 100644
--- a/tests/ofproto.at
+++ b/tests/ofproto.at
@@ -181,40 +181,6 @@ OFPST_PORT_DESC reply (OF1.5):
 OVS_VSWITCHD_STOP
 AT_CLEANUP
 
-AT_SETUP([ofproto - port-desc stats (OpenFlow 1.6)])
-OVS_VSWITCHD_START
-add_of_ports br0 1 2 3
-AT_CHECK([ovs-ofctl -F OXM-OpenFlow16 -O OpenFlow16 -vwarn dump-ports-desc br0], [0], [stdout])
-AT_CHECK([strip_xids < stdout | sed 's/00:0./00:0x/'], [0], [dnl
-OFPST_PORT_DESC reply (OF1.6):
- 1(p1): addr:aa:55:aa:55:00:0x
-     config:     0
-     state:      LIVE
-     speed: 0 Mbps now, 0 Mbps max
- 2(p2): addr:aa:55:aa:55:00:0x
-     config:     0
-     state:      LIVE
-     speed: 0 Mbps now, 0 Mbps max
- 3(p3): addr:aa:55:aa:55:00:0x
-     config:     0
-     state:      LIVE
-     speed: 0 Mbps now, 0 Mbps max
- LOCAL(br0): addr:aa:55:aa:55:00:0x
-     config:     0
-     state:      LIVE
-     speed: 0 Mbps now, 0 Mbps max
-])
-AT_CHECK([ovs-ofctl -F OXM-OpenFlow16 -O OpenFlow16 -vwarn dump-ports-desc br0 2], [0], [stdout])
-AT_CHECK([strip_xids < stdout | sed 's/00:0./00:0x/'], [0], [dnl
-OFPST_PORT_DESC reply (OF1.6):
- 2(p2): addr:aa:55:aa:55:00:0x
-     config:     0
-     state:      LIVE
-     speed: 0 Mbps now, 0 Mbps max
-])
-OVS_VSWITCHD_STOP
-AT_CLEANUP
-
 dnl CHECK_QUEUE_STATS(label, option, format)
 m4_define([CHECK_QUEUE_STATS], [
 AT_SETUP([ofproto - queue stats - (OpenFlow $1)])
@@ -747,7 +713,7 @@ OFPT_GROUP_MOD (OF1.5):
 ])
 # Negative test.
 AT_CHECK([ovs-ofctl -O OpenFlow11 -vwarn remove-buckets br0 group_id=1234,command_bucket_id=last], [1], [],
-  [ovs-ofctl: none of the usable flow formats (OpenFlow10,NXM,OXM-OpenFlow15,OXM-OpenFlow16) is among the allowed flow formats (OpenFlow11)
+  [ovs-ofctl: none of the usable flow formats (OpenFlow10,NXM,OXM-OpenFlow15) is among the allowed flow formats (OpenFlow11)
 ])
 OVS_VSWITCHD_STOP
 AT_CLEANUP
@@ -1054,7 +1020,7 @@ Error OFPBFC_MSG_FAILED for: OFPT_BUNDLE_CONTROL (OF1.5):
 ])
 # Negative test.
 AT_CHECK([ovs-ofctl --bundle -O OpenFlow11 -vwarn remove-buckets br0 group_id=1234,command_bucket_id=last], [1], [],
-  [ovs-ofctl: none of the usable flow formats (OXM-OpenFlow15,OXM-OpenFlow16) is among the allowed flow formats (OXM-OpenFlow14)
+  [ovs-ofctl: none of the usable flow formats (OXM-OpenFlow15) is among the allowed flow formats (OXM-OpenFlow14)
 ])
 OVS_VSWITCHD_STOP
 AT_CLEANUP
@@ -1374,39 +1340,6 @@ done
 OVS_VSWITCHD_STOP
 AT_CLEANUP
 
-AT_SETUP([ofproto - mod-port (OpenFlow 1.6)])
-OVS_VSWITCHD_START
-for command_config_state in \
-    'up 0 LIVE' \
-    'no-receive NO_RECV LIVE' \
-    'no-forward NO_RECV,NO_FWD LIVE' \
-    'no-packet-in NO_RECV,NO_FWD,NO_PACKET_IN LIVE' \
-    'forward NO_RECV,NO_PACKET_IN LIVE' \
-    'packet-in NO_RECV LIVE' \
-    'up NO_RECV LIVE' \
-    'receive 0 LIVE' \
-    'down PORT_DOWN LINK_DOWN'
-do
-    printf '\n--- %s --- \n\n' "$command_config_state"
-    set $command_config_state
-    command=$[1] config=`echo $[2] | sed 's/,/ /g'` state=$[3]
-    AT_CHECK([ovs-ofctl -O OpenFlow16 -vwarn mod-port br0 br0 $command])
-    AT_CHECK([ovs-ofctl -O OpenFlow16 -vwarn show br0], [0], [stdout])
-    AT_CHECK_UNQUOTED([strip_xids < stdout], [0], [dnl
-OFPT_FEATURES_REPLY (OF1.6): dpid:fedcba9876543210
-n_tables:254, n_buffers:0
-capabilities: FLOW_STATS TABLE_STATS PORT_STATS GROUP_STATS QUEUE_STATS BUNDLES
-OFPST_PORT_DESC reply (OF1.6):
- LOCAL(br0): addr:aa:55:aa:55:00:00
-     config:     $config
-     state:      $state
-     speed: 0 Mbps now, 0 Mbps max
-OFPT_GET_CONFIG_REPLY (OF1.6): frags=normal miss_send_len=0
-])
-done
-OVS_VSWITCHD_STOP
-AT_CLEANUP
-
 AT_SETUP([ofproto - basic flow_mod commands (NXM)])
 OVS_VSWITCHD_START
 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0], [NXST_FLOW reply:
@@ -5562,19 +5495,19 @@ dnl Check logs for OpenFlow trace
 # Prevent race.
 OVS_WAIT_UNTIL([vconn_sub < ovs-vswitchd.log | test `grep -- "|vconn|DBG|unix: sent (Success): NXST_FLOW reply" | wc -l` -ge 3])
 AT_CHECK([print_vconn_debug | vconn_sub | ofctl_strip], [0], [dnl
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: OFPT_FLOW_MOD: DEL actions=drop
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
  version bitmap: 0x05
-vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x07 and earlier, peer supports version 0x05)
+vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
@@ -5612,11 +5545,11 @@ vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: NXT_SET_FLOW_FORMAT: format=nxm
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
@@ -5624,11 +5557,11 @@ vconn|DBG|unix: received: NXST_FLOW request:
 vconn|DBG|unix: sent (Success): NXST_FLOW reply:
  idle_timeout=50, in_port=2,dl_src=00:66:77:88:99:aa actions=output:5
  idle_timeout=60, in_port=2,dl_src=00:77:88:99:aa:bb actions=output:6
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
  version bitmap: 0x05
-vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x07 and earlier, peer supports version 0x05)
+vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
@@ -5645,11 +5578,11 @@ vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: NXT_SET_FLOW_FORMAT: format=nxm
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
@@ -5657,11 +5590,11 @@ vconn|DBG|unix: received: NXST_FLOW request:
 vconn|DBG|unix: sent (Success): NXST_FLOW reply:
  idle_timeout=50, in_port=2,dl_src=00:66:77:88:99:aa actions=drop
  idle_timeout=60, in_port=2,dl_src=00:77:88:99:aa:bb actions=output:7
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
  version bitmap: 0x05
-vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x07 and earlier, peer supports version 0x05)
+vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
@@ -5681,11 +5614,11 @@ vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: NXT_SET_FLOW_FORMAT: format=nxm
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
@@ -6244,19 +6177,19 @@ dnl Check logs for OpenFlow trace
 # Prevent race.
 OVS_WAIT_UNTIL([vconn_sub < ovs-vswitchd.log | test `grep -- "|vconn|DBG|unix: sent (Success): NXST_FLOW reply" | wc -l` -ge 3])
 AT_CHECK([print_vconn_debug | vconn_sub | ofctl_strip], [0], [dnl
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: OFPT_FLOW_MOD: DEL actions=drop
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.3):
  version bitmap: 0x04
-vconn|DBG|unix: negotiated OpenFlow version 0x04 (we support version 0x07 and earlier, peer supports version 0x04)
+vconn|DBG|unix: negotiated OpenFlow version 0x04 (we support version 0x06 and earlier, peer supports version 0x04)
 vconn|DBG|unix: received: ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): ONFT_BUNDLE_CONTROL (OF1.3):
@@ -6294,11 +6227,11 @@ vconn|DBG|unix: received: ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: NXT_SET_FLOW_FORMAT: format=nxm
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
@@ -6306,11 +6239,11 @@ vconn|DBG|unix: received: NXST_FLOW request:
 vconn|DBG|unix: sent (Success): NXST_FLOW reply:
  idle_timeout=50, in_port=2,dl_src=00:66:77:88:99:aa actions=output:5
  idle_timeout=60, in_port=2,dl_src=00:77:88:99:aa:bb actions=output:6
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.3):
  version bitmap: 0x04
-vconn|DBG|unix: negotiated OpenFlow version 0x04 (we support version 0x07 and earlier, peer supports version 0x04)
+vconn|DBG|unix: negotiated OpenFlow version 0x04 (we support version 0x06 and earlier, peer supports version 0x04)
 vconn|DBG|unix: received: ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): ONFT_BUNDLE_CONTROL (OF1.3):
@@ -6327,11 +6260,11 @@ vconn|DBG|unix: received: ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: NXT_SET_FLOW_FORMAT: format=nxm
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
@@ -6339,11 +6272,11 @@ vconn|DBG|unix: received: NXST_FLOW request:
 vconn|DBG|unix: sent (Success): NXST_FLOW reply:
  idle_timeout=50, in_port=2,dl_src=00:66:77:88:99:aa actions=drop
  idle_timeout=60, in_port=2,dl_src=00:77:88:99:aa:bb actions=output:7
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.3):
  version bitmap: 0x04
-vconn|DBG|unix: negotiated OpenFlow version 0x04 (we support version 0x07 and earlier, peer supports version 0x04)
+vconn|DBG|unix: negotiated OpenFlow version 0x04 (we support version 0x06 and earlier, peer supports version 0x04)
 vconn|DBG|unix: received: ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): ONFT_BUNDLE_CONTROL (OF1.3):
@@ -6363,11 +6296,11 @@ vconn|DBG|unix: received: ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): ONFT_BUNDLE_CONTROL (OF1.3):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO:
  version bitmap: 0x01
-vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x07 and earlier, peer supports version 0x01)
+vconn|DBG|unix: negotiated OpenFlow version 0x01 (we support version 0x06 and earlier, peer supports version 0x01)
 vconn|DBG|unix: received: NXT_SET_FLOW_FORMAT: format=nxm
 vconn|DBG|unix: received: OFPT_BARRIER_REQUEST:
 vconn|DBG|unix: sent (Success): OFPT_BARRIER_REPLY:
diff --git a/tests/ovs-ofctl.at b/tests/ovs-ofctl.at
index 6ae347042578..c8062c8acc34 100644
--- a/tests/ovs-ofctl.at
+++ b/tests/ovs-ofctl.at
@@ -3080,11 +3080,11 @@ dnl Check logs for OpenFlow trace
 OVS_WAIT_UNTIL([vconn_sub < ovs-vswitchd.log | test `grep -- "|vconn|DBG|unix: sent (Success): OFPST_FLOW reply" | wc -l` -ge 2])
 # AT_CHECK([sed -n "s/^.*\(|vconn|DBG|.*xid=.*:\).*$/\1/p" ovs-vswitchd.log], [0], [dnl
 AT_CHECK([print_vconn_debug | vconn_sub | ofctl_strip], [0], [dnl
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
  version bitmap: 0x05
-vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x07 and earlier, peer supports version 0x05)
+vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
@@ -3119,11 +3119,11 @@ vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
  version bitmap: 0x05
-vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x07 and earlier, peer supports version 0x05)
+vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
 vconn|DBG|unix: received: OFPST_FLOW request (OF1.4):
 vconn|DBG|unix: sent (Success): OFPST_FLOW reply (OF1.4):
  table=1, importance=1, dl_vlan=1 actions=drop
@@ -3168,11 +3168,11 @@ vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
  bundle_id=0 type=COMMIT_REPLY flags=0
-vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.6):
- version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
+ version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
  version bitmap: 0x05
-vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x07 and earlier, peer supports version 0x05)
+vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
 vconn|DBG|unix: received: OFPST_FLOW request (OF1.4):
 vconn|DBG|unix: sent (Success): OFPST_FLOW reply (OF1.4):
  table=1, importance=11, dl_vlan=1 actions=drop
diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
index c7b156571e9d..60b4a1c45a3a 100644
--- a/utilities/ovs-ofctl.8.in
+++ b/utilities/ovs-ofctl.8.in
@@ -1288,8 +1288,8 @@ vSwitch 2.10 added support for table names.  Earlier versions always
 behaved as if \fB\-\-no\-names\fR were specified.
 .IP
 Open vSwitch does not place its own limit on the length of port names,
-but OpenFlow 1.0 to 1.5 limit port names to 15 bytes and OpenFlow 1.6
-limits them to 63 bytes.  Because \fRovs\-ofctl\fR uses OpenFlow to
+but OpenFlow limits port names to 15 bytes.
+Because \fRovs\-ofctl\fR uses OpenFlow to
 retrieve the mapping between port names and numbers, names longer than
 this limit will be truncated for both display and acceptance.
 Truncation can also cause long names that are different to appear to
@@ -1365,7 +1365,6 @@ format.
 .IQ "\fBOXM-OpenFlow13\fR"
 .IQ "\fBOXM-OpenFlow14\fR"
 .IQ "\fBOXM-OpenFlow15\fR"
-.IQ "\fBOXM-OpenFlow16\fR"
 These are the standard OXM (OpenFlow Extensible Match) flow format in
 OpenFlow 1.2 and later.
 .RE
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index aab5a5cd9afe..d8a31e394301 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -2489,7 +2489,6 @@ ofctl_mod_port(struct ovs_cmdl_context *ctx)
 
     pm.port_no = pp.port_no;
     pm.hw_addr = pp.hw_addr;
-    pm.hw_addr64 = pp.hw_addr64;
     pm.config = 0;
     pm.mask = 0;
     pm.advertise = 0;
@@ -2695,8 +2694,7 @@ ofctl_mod_table(struct ovs_cmdl_context *ctx)
          * necessary to restore the current configuration of table-config
          * parameters using OFPMP14_TABLE_DESC request. */
         if (allowed_versions & ((1u << OFP14_VERSION) |
-                                (1u << OFP15_VERSION) |
-                                (1u << OFP16_VERSION))) {
+                                (1u << OFP15_VERSION))) {
             struct ofputil_table_desc td;
 
             if (tm.table_id == OFPTT_ALL) {
diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema
index 1e4e342dcb96..3499fda4905e 100644
--- a/vswitchd/vswitch.ovsschema
+++ b/vswitchd/vswitch.ovsschema
@@ -1,6 +1,6 @@
 {"name": "Open_vSwitch",
- "version": "7.16.1",
- "cksum": "1452282319 23860",
+ "version": "8.0.0",
+ "cksum": "1406362528 23817",
  "tables": {
    "Open_vSwitch": {
      "columns": {
@@ -104,8 +104,7 @@
                             "OpenFlow12",
                             "OpenFlow13",
                             "OpenFlow14",
-                            "OpenFlow15",
-                            "OpenFlow16"]]},
+                            "OpenFlow15"]]},
            "min": 0, "max": "unlimited"}},
        "fail_mode": {
          "type": {"key": {"type": "string",
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index d58f6322876a..111ada0f39c3 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -1230,9 +1230,8 @@
         </p>
 
         <p>
-          OpenFlow 1.5 and 1.6 are not enabled by default because their
-          implementations are missing features.  In addition, the OpenFlow 1.6
-          specification is still under development and thus subject to change.
+          OpenFlow 1.5 is not enabled by default because its
+          implementations is missing features.
         </p>
       </column>
     </group>
