Bug 6674 - the key of the serialization function registered by the vendor is not...
[openflowjava.git] / openflow-protocol-api / src / main / yang / openflow-types.yang
old mode 100644 (file)
new mode 100755 (executable)
index f2254db..7d11baf
-module openflow-types {
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+ module openflow-types {
     namespace "urn:opendaylight:openflow:common:types";
     prefix "oft";
 
     revision "2013-07-31" {
     namespace "urn:opendaylight:openflow:common:types";
     prefix "oft";
 
     revision "2013-07-31" {
-        //description "OpenFlow 1.3 - common types model";
+        description "#NOT_PUBLISHED# OpenFlow 1.3 - common types model";
     }
 
     typedef port-number {
     }
 
     typedef port-number {
-        type uint32 {
-                range "0..4294967040"; // 0xffffff00 See for actual value
-        }
+        description "Port numbering. Ports are numbered starting from 1 -
+         supports special / reserved values (in OF v1.3)";
+        type uint32;
     }
 
     }
 
-    typedef special-port-number {
+    typedef port-number-values {
+        description "Reserved OpenFlow Port (fake output \"ports\") (OF v1.3).";
         type enumeration {
         type enumeration {
-            enum in-port { 
-                //value "4294967288";
-                //description "Send the packet out the input port. This virtual port must be explicitly used in order to send back out of the input port."
-            }
-            enum table { 
-                //value "4294967289"; // 0xfffffff9;
-                //description "Perform actions in flow table. NB: This can only be the destination port for packet-out messages."
-            }
-            enum normal { 
-                //value "4294967290"; // 0xfffffffa;
-                //description "Process with normal L2/L3 switching."
-            }
-            enum flood { 
-                //value "4294967291"; // 0xfffffffb;
-                //description "All physical ports except input port and those disabled by STP."
-            }
-            enum all { 
-                //value "4294967292"; // 0xfffffffc;
-                //description "All physical ports except input port."
-            }
-            enum controller { 
-                //value "4294967293";  // 0xfffffffd;
-                //description "Send to controller."
+            enum MAX {
+                description "Maximum number of physical and logical switch ports.";
+                value -256; // 0xffffff00
+            }
+            enum IN_PORT {
+                description "Send the packet out the input port. This
+                            reserved port must be explicitly used
+                            in order to send back out of the input
+                            port.";
+                value -8; // 0xfffffff8
+            }
+            enum TABLE {
+                description "Submit the packet to the first flow table
+                            NB: This destination port can only be
+                            used in packet-out messages.";
+                value -7; // 0xfffffff9
+            }
+            enum NORMAL {
+                description "Process with normal L2/L3 switching.";
+                value -6; // 0xfffffffa
+            }
+            enum FLOOD {
+                description "All physical ports in VLAN, except input
+                            port and those blocked or link down.";
+                value -5; // 0xfffffffb
+            }
+            enum ALL {
+                description "All physical ports except input port.";
+                value -4; // 0xfffffffc
+            }
+            enum CONTROLLER {
+                description "Send to controller.";
+                value -3; // 0xfffffffd
+            }
+            enum LOCAL {
+                description "Local openflow \"port\".";
+                value -2; // 0xfffffffe
+            }
+            enum ANY {
+                description "Wildcard port used only for flow mod
+                            (delete) and flow stats requests. Selects
+                            all flows regardless of output port
+                            (including flows with no output port).";
+                value -1; // 0xffffffff
             }
             }
-            enum local { 
-                //value "4294967294"; // 0xfffffffe;
-                //description "Local openflow port."
-            }
-            enum none { 
-                //value "4294967295"; // 0xffffffff;
-                //description "not associated with a physical port."
-            }
-        }
-    }
-
-    typedef any-port-number {
-        type union {
-            type port-number;
-            type special-port-number;
         }
     }
 
     typedef port-features {
         }
     }
 
     typedef port-features {
-        ////description "Features of ports available in datapath.";
-        //reference "ofp_port_features";
+        description "Features of ports available in datapath.";
         type bits {
         type bits {
-            bit 10mb_hd { 
+            bit _10mb_hd {
                 position 0;
                 position 0;
-                //description "10 Mb half-duplex rate support.";
+                description "10 Mb half-duplex rate support.";
             }
             }
-            bit 10mb-fd { 
+            bit _10mb-fd {
                 position 1;
                 position 1;
-                //description "10 Mb full-duplex rate support.";
+                description "10 Mb full-duplex rate support.";
             }
             }
-            bit 100mb-hd { 
+            bit _100mb-hd {
                 position 2;
                 position 2;
-                //description "100 Mb half-duplex rate support.";
+                description "100 Mb half-duplex rate support.";
             }
             }
-            bit 100mb-fd { 
+            bit _100mb-fd {
                 position 3;
                 position 3;
-                //description "100 Mb full-duplex rate support.";
+                description "100 Mb full-duplex rate support.";
             }
             }
-            bit 1gb-hd { 
+            bit _1gb-hd {
                 position 4;
                 position 4;
-                //description "1 Gb half-duplex rate support.";
+                description "1 Gb half-duplex rate support.";
             }
             }
-            bit 1gb-fd { 
+            bit _1gb-fd {
                 position 5;
                 position 5;
-                //description "1 Gb full-duplex rate support.";
+                description "1 Gb full-duplex rate support.";
             }
             }
-            bit 10gb-fd { 
+            bit _10gb-fd {
                 position 6;
                 position 6;
-                //description "10 Gb full-duplex rate support.";
+                description "10 Gb full-duplex rate support.";
             }
             }
-            bit 40gb-fd { 
+            bit _40gb-fd {
                 position 7;
                 position 7;
-                //description "40 Gb full-duplex rate support.";
+                description "40 Gb full-duplex rate support.";
             }
             }
-            bit 100gb-fd { 
+            bit _100gb-fd {
                 position 8;
                 position 8;
-                //description "100 Gb full-duplex rate support.";
+                description "100 Gb full-duplex rate support.";
             }
             }
-            bit 1tb-fd { 
+            bit _1tb-fd {
                 position 9;
                 position 9;
-                //description "1 Tb full-duplex rate support.";
+                description "1 Tb full-duplex rate support.";
             }
             }
-            bit other { 
+            bit other {
                 position 10;
                 position 10;
-                //description "Other rate, not in the list.";
+                description "Other rate, not in the list.";
             }
             }
-            bit copper { 
+            bit copper {
                 position 11;
                 position 11;
-                //description "Copper medium.";
+                description "Copper medium.";
             }
             }
-            bit fiber { 
+            bit fiber {
                 position 12;
                 position 12;
-                //description "Fiber medium.";
+                description "Fiber medium.";
             }
             }
-            bit autoneg { 
+            bit autoneg {
                 position 13;
                 position 13;
-                //description "Auto-negotiation.";
+                description "Auto-negotiation.";
             }
             }
-            bit pause { 
+            bit pause {
                 position 14;
                 position 14;
-                //description "Pause.";
+                description "Pause.";
             }
             }
-            bit pause-asym { 
+            bit pause-asym {
                 position 15;
                 position 15;
-                //description "Asymmetric pause.";
+                description "Asymmetric pause.";
             }
         }
     }
 
     typedef port-config {
             }
         }
     }
 
     typedef port-config {
-        description 
+        description
            "Flags to indicate behavior of the physical port. These flags are
            "Flags to indicate behavior of the physical port. These flags are
-            describe the current configuration and used port_mod message 
+            describe the current configuration and used port_mod message
             to configure the port's behavior.";
         type bits {
             to configure the port's behavior.";
         type bits {
-            bit port-down { 
+            bit port-down {
                 //description " Port is administratively down.";
                 position 0;
             }
                 //description " Port is administratively down.";
                 position 0;
             }
-            bit no-recv { 
+            bit no-recv {
                 //description " Drop all packets received by port.";
                 position 2;
             }
                 //description " Drop all packets received by port.";
                 position 2;
             }
-            bit no-fwd { 
+            bit no-fwd {
                 //description " Drop packets forwarded to port.";
                 position 5;
             }
                 //description " Drop packets forwarded to port.";
                 position 5;
             }
-            bit no-packet-in { 
+            bit no-packet-in {
                 //description "Do not send packet-in msgs for port.";
                 position 6;
             }
                 //description "Do not send packet-in msgs for port.";
                 position 6;
             }
@@ -153,7 +167,7 @@ module openflow-types {
     }
 
     typedef port-state {
     }
 
     typedef port-state {
-        description 
+        description
             "Current state of the physical port. These are not configurable from
             the controller.";
         type bits {
             "Current state of the physical port. These are not configurable from
             the controller.";
         type bits {
@@ -173,34 +187,29 @@ module openflow-types {
     }
 
     identity match-type-base {
     }
 
     identity match-type-base {
-        description 
+        description
            "The match type indicates the match structure (set of fields that compose the
             match) in use. The match type is placed in the type field at the beginning
            "The match type indicates the match structure (set of fields that compose the
             match) in use. The match type is placed in the type field at the beginning
-            of all match structures.Extensions that define match types may be 
+            of all match structures.Extensions that define match types may be
             published on the ONF wiki. Support for extensions is optional.";
     }
 
     identity standard-match-type {
             published on the ONF wiki. Support for extensions is optional.";
     }
 
     identity standard-match-type {
-        deprecated true;
         base oft:match-type-base;
     }
 
         base oft:match-type-base;
     }
 
-    typedef match-type {
-        //type identityref {
-        //    base oft:match-type-base;
-        //}
-        
-        //TODO: use identityref, when generating available
-        type string;
+    identity instruction-base {
+        description "Base identity for instruction types";
     }
 
     }
 
-    identity instruction {
+    identity action-base {
+        description "Base identity for action types";
     }
 
     }
 
-    identity action {
+    identity experimenter-meter-band-sub-type {
+        description "The base identity for vendor's meter bands.";
     }
 
     }
 
-
     typedef metadata {
         type binary;
     }
     typedef metadata {
         type binary;
     }
@@ -221,583 +230,1703 @@ module openflow-types {
     typedef ether-type {
         type uint16;
     }
     typedef ether-type {
         type uint16;
     }
-
+    typedef experimenter-id {
+        description "This type represents experimenter ID used in experimenter messages.
+                     It also represents vendor ID - as it is the same for OF version 1.3+.
+                     (VENDOR naming convention has been changed in OF v1.3 specification
+                      to EXPERIMENTER)";
+        type uint32;
+    }
     typedef error-type {
         type enumeration {
             enum HELLO_FAILED {
     typedef error-type {
         type enumeration {
             enum HELLO_FAILED {
-                value 0; 
+                value 0;
                 description "Hello Protocol failed.";
             }
             enum BAD_REQUEST {
                 description "Hello Protocol failed.";
             }
             enum BAD_REQUEST {
-                value 1; 
+                value 1;
                 description "Request was not understood.";
             }
             enum BAD_ACTION {
                 description "Request was not understood.";
             }
             enum BAD_ACTION {
-                value 2; 
+                value 2;
                 description "Error in action description.";
             }
             enum BAD_INSTRUCTION {
                 description "Error in action description.";
             }
             enum BAD_INSTRUCTION {
-                value 3; 
+                value 3;
                 description "Error in instruction list.";
             }
             enum BAD_MATCH {
                 description "Error in instruction list.";
             }
             enum BAD_MATCH {
-                value 4; 
+                value 4;
                 description "Error in match.";
             }
             enum FLOW_MOD_FAILED {
                 description "Error in match.";
             }
             enum FLOW_MOD_FAILED {
-                value 5; 
+                value 5;
                 description "Problem modifying flow entry.";
             }
             enum GROUP_MOD_FAILED {
                 description "Problem modifying flow entry.";
             }
             enum GROUP_MOD_FAILED {
-                value 6; 
+                value 6;
                 description "Problem modifying group entry.";
             }
             enum PORT_MOD_FAILED {
                 description "Problem modifying group entry.";
             }
             enum PORT_MOD_FAILED {
-                value 7; 
+                value 7;
                 description "Port mod request failed.";
             }
             enum TABLE_MOD_FAILED {
                 description "Port mod request failed.";
             }
             enum TABLE_MOD_FAILED {
-                value 8; 
+                value 8;
                 description "Table mod request failed.";
             }
             enum QUEUE_OP_FAILED {
                 description "Table mod request failed.";
             }
             enum QUEUE_OP_FAILED {
-                value 9; 
+                value 9;
                 description "Queue operation failed.";
             }
             enum SWITCH_CONFIG_FAILED {
                 description "Queue operation failed.";
             }
             enum SWITCH_CONFIG_FAILED {
-                value 10; 
+                value 10;
                 description "Switch config request failed.";
             }
             enum ROLE_REQUEST_FAILED {
                 description "Switch config request failed.";
             }
             enum ROLE_REQUEST_FAILED {
-                value 11; 
+                value 11;
                 description "Controller Role request failed.";
             }
             enum METER_MOD_FAILED {
                 description "Controller Role request failed.";
             }
             enum METER_MOD_FAILED {
-                value 12; 
+                value 12;
                 description "Error in meter.";
             }
             enum TABLE_FEATURES_FAILED {
                 description "Error in meter.";
             }
             enum TABLE_FEATURES_FAILED {
-                value 13; 
+                value 13;
                 description "Setting table features failed.";
             }
             enum EXPERIMENTER {
                 description "Setting table features failed.";
             }
             enum EXPERIMENTER {
-                value 65535; //0xffff 
+                value 65535; //0xffff
                 description "Experimenter error messages.";
             }
         }
     }
 
                 description "Experimenter error messages.";
             }
         }
     }
 
-    typedef hello-element-type {
+    typedef hello-failed-code {
         type enumeration {
         type enumeration {
-            enum VERSIONBITMAP {
-                value 1; 
-                description "Bitmap of version supported.";
+            enum INCOMPATIBLE {
+                value 0;
+                description "Hello Protocol failed.";
+            }
+            enum EPERM {
+                value 1;
+                description "Request was not understood.";
             }
         }
     }
 
             }
         }
     }
 
-    typedef switch-config-flag {
-        /* Handling of IP fragments. */
+    typedef bad-request-code {
         type enumeration {
         type enumeration {
-            enum FRAG_NORMAL {
-                value 0; 
-                description "No special handling for fragments.";
+            enum BAD_VERSION {
+                value 0;
             }
             }
-            enum OFPC_FRAG_DROP {
-                value 1; 
-                description "Drop fragments.";
+            enum BAD_TYPE {
+                value 1;
             }
             }
-            enum OFPC_FRAG_REASM {
-                value 2; 
-                description "Reassemble (only if OFPC_IP_REASM set).";
+            enum BAD_MULTIPART {
+                value 2;
             }
             }
-            enum OFPC_FRAG_MASK {
-                value 3; 
+            enum BAD_EXPERIMENTER {
+                value 3;
+            }
+            enum BAD_EXP_TYPE {
+                value 4;
+            }
+            enum EPERM {
+                value 5;
+            }
+            enum BAD_LEN {
+                value 6;
+            }
+            enum BUFFER_EMPTY {
+                value 7;
+            }
+            enum BUFFER_UNKNOWN {
+                value 8;
+            }
+            enum BAD_TABLE_ID {
+                value 9;
+            }
+            enum IS_SLAVE {
+                value 10;
+            }
+            enum BAD_PORT {
+                value 11;
+            }
+            enum BAD_PACKET {
+                value 12;
+            }
+            enum MULTIPART_BUFFER_OVERFLOW {
+                value 13;
             }
         }
     }
 
             }
         }
     }
 
-    typedef flow-removed-reason {
-        /* flow removed */
+    typedef bad-action-code {
         type enumeration {
         type enumeration {
-            enum OFPRR_IDLE_TIMEOUT {
+            enum BAD_TYPE {
                 value 0;
                 value 0;
-                description "Flow idle time exceeded idle_timeout.";
             }
             }
-            enum OFPRR_HARD_TIMEOUT {
+            enum BAD_LEN {
                 value 1;
                 value 1;
-                description "Time exceeded hard_timeout.";
             }
             }
-            enum OFPRR_DELETE {
+            enum BAD_EXPERIMENTER {
                 value 2;
                 value 2;
-                description "Evicted by a DELETE flow mod.";
             }
             }
-            enum OFPRR_GROUP_DELETE {
+            enum BAD_EXP_TYPE {
                 value 3;
                 value 3;
-                description "Group was removed.";
+            }
+            enum BAD_OUT_PORT {
+                value 4;
+            }
+            enum BAD_ARGUMENT {
+                value 5;
+            }
+            enum EPERM {
+                value 6;
+            }
+            enum TOO_MANY {
+                value 7;
+            }
+            enum BAD_QUEUE {
+                value 8;
+            }
+            enum BAD_OUT_GROUP {
+                value 9;
+            }
+            enum MATCH_INCONSISTENT {
+                value 10;
+            }
+            enum UNSUPPORTED_ORDER {
+                value 11;
+            }
+            enum BAD_TAG {
+                value 12;
+            }
+            enum BAD_SET_TYPE {
+                value 13;
+            }
+            enum BAD_SET_LEN {
+                value 14;
+            }
+            enum BAD_SET_ARGUMENT {
+                value 15;
             }
         }
     }
 
             }
         }
     }
 
-    typedef port-reason {
-        /* port status */
+    typedef bad-instruction-code {
         type enumeration {
         type enumeration {
-            enum OFPPR_ADD {
+            enum UNKNOWN_INST {
                 value 0;
                 value 0;
-                description "The port was added.";
             }
             }
-            enum OFPPR_DELETE {
+            enum UNSUP_INST {
                 value 1;
                 value 1;
-                description "he port was removed.";
             }
             }
-            enum OFPPR_MODIFY {
+            enum BAD_TABLE_ID {
                 value 2;
                 value 2;
-                description "Some attribute of the port has changed.";
+            }
+            enum UNSUP_METADATA {
+                value 3;
+            }
+            enum UNSUP_METADATA_MASK {
+                value 4;
+            }
+            enum BAD_EXPERIMENTER {
+                value 5;
+            }
+            enum BAD_EXP_TYPE {
+                value 6;
+            }
+            enum BAD_LEN {
+                value 7;
+            }
+            enum EPERM {
+                value 8;
             }
         }
     }
 
             }
         }
     }
 
-    typedef flow-mod-command {
-        /* ofp_flow_mod_command */
+    typedef bad-match-code {
         type enumeration {
         type enumeration {
-            enum OFPFC_ADD {      
-                value 0;      
-                description "New flow.";    
+            enum BAD_TYPE {
+                value 0;
             }
             }
-            enum OFPFC_MODIFY {
+            enum BAD_LEN {
                 value 1;
                 value 1;
-                description "Modify all matching flows.";
             }
             }
-            enum OFPFC_MODIFY_STRICT {
+            enum BAD_TAG {
                 value 2;
                 value 2;
-                description "Modify entry strictly matching wildcards and priority.";
             }
             }
-            enum OFPFC_DELETE {
+            enum BAD_DL_ADDR_MASK {
                 value 3;
                 value 3;
-                description "Delete all matching flows.";
             }
             }
-            enum OFPFC_DELETE_STRICT {
+            enum BAD_NW_ADDR_MASK {
                 value 4;
                 value 4;
-                description "Delete entry strictly matching wildcards and priority.";
             }
             }
-        }
-    }
-
-    typedef flow-mod-flags {
-        /* ofp_flow_mod_flags */
-        type bits {
-            bit OFPFF_SEND_FLOW_REM {
-                position 0;
-                /* Send flow removed message when flow expires or is deleted. */
+            enum BAD_WILDCARDS {
+                value 5;
             }
             }
-            bit OFPFF_CHECK_OVERLAP {
-                position 1;
-                /* Check for overlapping entries first. */
+            enum BAD_FIELD {
+                value 6;
             }
             }
-            bit OFPFF_RESET_COUNTS {
-                position 2;
-                /* Reset flow packet and byte counts. */
+            enum BAD_VALUE {
+                value 7;
             }
             }
-            bit OFPFF_NO_PKT_COUNTS {
-                position 3;
-                /* Don't keep track of packet count. */
+            enum BAD_MASK {
+                value 8;
             }
             }
-            bit OFPFF_NO_BYT_COUNTS {
-                position 4;
-                /* Don't keep track of byte count. */
+            enum BAD_PREREQ {
+                value 9;
+            }
+            enum DUP_FIELD {
+                value 10;
+            }
+            enum EPERM {
+                value 11;
             }
         }
     }
 
             }
         }
     }
 
-    typedef group-mod-command {
-        /* ofp_group_mod_command */
+    typedef flow-mod-failed-code {
         type enumeration {
         type enumeration {
-            enum OFPGC_ADD {            
-              value 0;            
-              description "New group.";            
+            enum UNKNOWN {
+                value 0;
             }
             }
-            enum OFPGC_MODIFY {
-              value 1;
-              description "Modify all matching groups.";
+            enum TABLE_FULL {
+                value 1;
             }
             }
-            enum OFPGC_DELETE {
-              value 2;
-              description "Delete all matching groups.";
+            enum BAD_TABLE_ID {
+                value 2;
             }
             }
-            
-        }
-    }
-
-    typedef group-type {
-        /* ofp_group_type */
-        type enumeration {
-            enum OFPGT_ALL {            
-              value 0;            
-              description "All (multicast/broadcast) group.";            
+            enum OVERLAP {
+                value 3;
             }
             }
-            enum OFPGT_SELECT {
-              value 1;
-              description "Select group.";
+            enum EPERM {
+                value 4;
             }
             }
-            enum OFPGT_INDIRECT {
-              value 2;
-              description "Indirect group.";
+            enum BAD_TIMEOUT {
+                value 5;
             }
             }
-            enum OFPGT_FF {
-              value 3;
-              description "Fast failover group.";
+            enum BAD_COMMAND {
+                value 6;
             }
             }
-        }
-    }
-
-    typedef multipart-request-flags {
-        description
-            "enum ofp_multipart_request_flags ";
-        type bits {
-            bit OFPMPF_REQ_MORE {
-                //description "More requests to follow.";
-                position 0;
+            enum BAD_FLAGS {
+                value 7;
             }
         }
     }
 
             }
         }
     }
 
-    typedef multipart-type {
-        /* ofp_multipart_type */
+    typedef group-mod-failed-code {
         type enumeration {
         type enumeration {
-            enum OFPMP_DESC {
-              value 0;
-              description "Description of this OpenFlow switch.
-                 The request body is empty.
-                 The reply body is struct ofp_desc.";
+            enum GROUP_EXISTS {
+                value 0;
             }
             }
-            enum OFPMP_FLOW {
-              value 1;
-              description "Individual flow statistics.
-                 The request body is struct ofp_flow_stats_request.
-                 The reply body is an array of struct ofp_flow_stats.";
+            enum INVALID_GROUP {
+                value 1;
             }
             }
-            enum OFPMP_AGGREGATE {
-              value 2;
-              description "Aggregate flow statistics.
-                 The request body is struct ofp_aggregate_stats_request.
-                 The reply body is struct ofp_aggregate_stats_reply.";
+            enum WEIGHT_UNSUPPORTED {
+                value 2;
             }
             }
-            enum OFPMP_TABLE {
-              value 3;
-              description "Flow table statistics.
-                 The request body is empty.
-                 The reply body is an array of struct ofp_table_stats.";
+            enum OUT_OF_GROUPS {
+                value 3;
             }
             }
-            enum OFPMP_PORT_STATS {
-              value 4;
-              description "Port statistics.
-                 The request body is struct ofp_port_stats_request.
-                 The reply body is an array of struct ofp_port_stats.";
+            enum OUT_OF_BUCKETS {
+                value 4;
             }
             }
-            enum OFPMP_QUEUE {
-              value 5;
-              description "Queue statistics for a port
-                 The request body is struct ofp_queue_stats_request.
-                 The reply body is an array of struct ofp_queue_stats";
+            enum CHAINING_UNSUPPORTED {
+                value 5;
             }
             }
-            enum OFPMP_GROUP {
-              value 6;
-              description "Group counter statistics.
-                 The request body is struct ofp_group_stats_request.
-                 The reply is an array of struct ofp_group_stats.";
+            enum WATCH_UNSUPPORTED {
+                value 6;
             }
             }
-            enum OFPMP_GROUP_DESC {
-              value 7;
-              description "Group description.
-                 The request body is empty.
-                 The reply body is an array of struct ofp_group_desc.";
+            enum LOOP {
+                value 7;
             }
             }
-            enum OFPMP_GROUP_FEATURES {
-              value 8;
-              description "Group features.
-                 The request body is empty.
-                 The reply body is struct ofp_group_features.";
+            enum UNKNOWN_GROUP {
+                value 8;
             }
             }
-            enum OFPMP_METER {
-              value 9;
-              description "Meter statistics.
-                 The request body is struct ofp_meter_multipart_requests.
-                 The reply body is an array of struct ofp_meter_stats.";
+            enum CHAINED_GROUP {
+                value 9;
             }
             }
-            enum OFPMP_METER_CONFIG {
-              value 10;
-              description "Meter configuration.
-                 The request body is struct ofp_meter_multipart_requests.
-                 The reply body is an array of struct ofp_meter_config.";
+            enum BAD_TYPE {
+                value 10;
             }
             }
-            enum OFPMP_METER_FEATURES {
-              value 11;
-              description "Meter features.
-                 The request body is empty.
-                 The reply body is struct ofp_meter_features.";
+            enum BAD_COMMAND {
+                value 11;
             }
             }
-            enum OFPMP_TABLE_FEATURES {
-              value 12;
-              description "Table features.
-                 The request body is either empty or contains an array of
-                 struct ofp_table_features containing the controller’s
-                 desired view of the switch. If the switch is unable to
-                 set the specified view an error is returned.
-                 The reply body is an array of struct ofp_table_features.";
+            enum BAD_BUCKET {
+                value 12;
             }
             }
-            enum OFPMP_PORT_DESC {
-              value 13;
-              description "Port description.
-                 The request body is empty.
-                 The reply body is an array of struct ofp_port.";
+            enum BAD_WATCH {
+                value 13;
             }
             }
-            enum OFPMP_EXPERIMENTER {
-              value 65535; //0xffff
-              description "Experimenter extension.
-                 The request and reply bodies begin with
-                 struct ofp_experimenter_multipart_header.
-                 The request and reply bodies are otherwise experimenter-defined.";
+            enum EPERM {
+                value 14;
             }
         }
     }
 
             }
         }
     }
 
-    typedef queue-property {
-        /* ofp_queue_properties */
+    typedef port-mod-failed-code {
         type enumeration {
         type enumeration {
-            enum OFPGT_ALL {
-              value 0;
-              description "All (multicast/broadcast) group.";
+            enum BAD_PORT {
+                value 0;
             }
             }
-            enum OFPQT_MIN_RATE {
+            enum BAD_HW_ADDR {
                 value 1;
                 value 1;
-                description "Minimum datarate guaranteed.";
             }
             }
-            enum OFPQT_MAX_RATE {
+            enum BAD_CONFIG {
                 value 2;
                 value 2;
-                description "Maximum datarate.";
             }
             }
-            enum OFPQT_EXPERIMENTER {
-                value 65535; // 0xffff 
-                description "Experimenter defined property.";
+            enum BAD_ADVERTISE {
+                value 3;
             }
             }
-        }
+            enum EPERM {
+                value 4;
+            }
+        }
+    }
+
+    typedef table-mod-failed-code {
+        type enumeration {
+            enum BAD_TABLE {
+                value 0;
+            }
+            enum BAD_CONFIG {
+                value 1;
+            }
+            enum EPERM {
+                value 2;
+            }
+        }
+    }
+
+    typedef queue-op-failed-code {
+        type enumeration {
+            enum BAD_PORT {
+                value 0;
+            }
+            enum BAD_QUEUE {
+                value 1;
+            }
+            enum EPERM {
+                value 2;
+            }
+        }
+    }
+
+    typedef switch-config-failed-code {
+        type enumeration {
+            enum BAD_FLAGS {
+                value 0;
+            }
+            enum BAD_LEN {
+                value 1;
+            }
+            enum EPERM {
+                value 2;
+            }
+        }
+    }
+
+    typedef role-request-failed-code {
+        type enumeration {
+            enum STALE {
+                value 0;
+            }
+            enum UNSUP {
+                value 1;
+            }
+            enum BAD_ROLE {
+                value 2;
+            }
+        }
+    }
+
+    typedef meter-mod-failed-code {
+        type enumeration {
+            enum UNKNOWN {
+                value 0;
+            }
+            enum METER_EXISTS {
+                value 1;
+            }
+            enum INVALID_METER {
+                value 2;
+            }
+            enum UNKNOWN_METER {
+                value 3;
+            }
+            enum BAD_COMMAND {
+                value 4;
+            }
+            enum BAD_FLAGS {
+                value 5;
+            }
+            enum BAD_RATE {
+                value 6;
+            }
+            enum BAD_BURST {
+                value 7;
+            }
+            enum BAD_BAND {
+                value 8;
+            }
+            enum BAD_BAND_VALUE {
+                value 9;
+            }
+            enum OUT_OF_METERS {
+                value 10;
+            }
+            enum OUT_OF_BANDS {
+                value 11;
+            }
+        }
+    }
+
+    typedef table-features-failed-code {
+        type enumeration {
+            enum BAD_TABLE {
+                value 0;
+            }
+            enum BAD_METADATA {
+                value 1;
+            }
+            enum BAD_TYPE {
+                value 2;
+            }
+            enum BAD_LEN {
+                value 3;
+            }
+            enum BAD_ARGUMENT {
+                value 4;
+            }
+            enum EPERM {
+                value 5;
+            }
+        }
+    }
+
+    typedef hello-element-type {
+        type enumeration {
+            enum VERSIONBITMAP {
+                value 1;
+                description "Bitmap of version supported.";
+            }
+        }
+    }
+
+    typedef capabilities {
+        description "Capabilities supported by the datapath.";
+        type bits {
+            bit OFPC_FLOW_STATS {
+                position 0;
+                /* Flow statistics. */
+            }
+            bit OFPC_TABLE_STATS {
+                position 1;
+                /* Table statistics. */
+            }
+            bit OFPC_PORT_STATS {
+                position 2;
+                /* Port statistics. */
+            }
+            bit OFPC_GROUP_STATS {
+                position 3;
+                /* Group statistics. */
+            }
+            bit OFPC_IP_REASM {
+                position 5;
+                /* Can reassemble IP fragments. */
+            }
+            bit OFPC_QUEUE_STATS {
+                position 6;
+                /* Queue statistics. */
+            }
+            bit OFPC_PORT_BLOCKED {
+                position 8;
+                /* Switch will block looping ports. */
+            }
+        }
+    }
+
+    typedef switch-config-flag {
+        description " Handling of IP fragments. ";
+        type enumeration {
+            enum FRAG_NORMAL {
+                value 0;
+                description "No special handling for fragments.";
+            }
+            enum OFPC_FRAG_DROP {
+                value 1;
+                description "Drop fragments.";
+            }
+            enum OFPC_FRAG_REASM {
+                value 2;
+                description "Reassemble (only if OFPC_IP_REASM set).";
+            }
+            enum OFPC_FRAG_MASK {
+                value 3;
+            }
+        }
+    }
+
+    typedef flow-removed-reason {
+        description "Why was this flow removed?";
+        type enumeration {
+            enum OFPRR_IDLE_TIMEOUT {
+                value 0;
+                description "Flow idle time exceeded idle_timeout.";
+            }
+            enum OFPRR_HARD_TIMEOUT {
+                value 1;
+                description "Time exceeded hard_timeout.";
+            }
+            enum OFPRR_DELETE {
+                value 2;
+                description "Evicted by a DELETE flow mod.";
+            }
+            enum OFPRR_GROUP_DELETE {
+                value 3;
+                description "Group was removed.";
+            }
+        }
+    }
+
+    typedef port-reason {
+        description "What changed about the physical port";
+        type enumeration {
+            enum OFPPR_ADD {
+                value 0;
+                description "The port was added.";
+            }
+            enum OFPPR_DELETE {
+                value 1;
+                description "he port was removed.";
+            }
+            enum OFPPR_MODIFY {
+                value 2;
+                description "Some attribute of the port has changed.";
+            }
+        }
+    }
+
+    typedef flow-mod-command {
+        /* ofp_flow_mod_command */
+        type enumeration {
+            enum OFPFC_ADD {
+                value 0;
+                description "New flow.";
+            }
+            enum OFPFC_MODIFY {
+                value 1;
+                description "Modify all matching flows.";
+            }
+            enum OFPFC_MODIFY_STRICT {
+                value 2;
+                description "Modify entry strictly matching wildcards and priority.";
+            }
+            enum OFPFC_DELETE {
+                value 3;
+                description "Delete all matching flows.";
+            }
+            enum OFPFC_DELETE_STRICT {
+                value 4;
+                description "Delete entry strictly matching wildcards and priority.";
+            }
+        }
+    }
+
+    typedef flow-mod-flags {
+        /* ofp_flow_mod_flags */
+        type bits {
+            bit OFPFF_SEND_FLOW_REM {
+                position 0;
+                description "Send flow removed message when flow expires or is deleted.";
+            }
+            bit OFPFF_CHECK_OVERLAP {
+                position 1;
+                description "Check for overlapping entries first.";
+            }
+            bit OFPFF_RESET_COUNTS {
+                position 2;
+                description "Reset flow packet and byte counts.";
+            }
+            bit OFPFF_NO_PKT_COUNTS {
+                position 3;
+                description "Don't keep track of packet count.";
+            }
+            bit OFPFF_NO_BYT_COUNTS {
+                position 4;
+                description "Don't keep track of byte count.";
+            }
+        }
+    }
+
+    typedef group-mod-command {
+        /* ofp_group_mod_command */
+        type enumeration {
+            enum OFPGC_ADD {
+              value 0;
+              description "New group.";
+            }
+            enum OFPGC_MODIFY {
+              value 1;
+              description "Modify all matching groups.";
+            }
+            enum OFPGC_DELETE {
+              value 2;
+              description "Delete all matching groups.";
+            }
+        }
+    }
+
+    typedef group-type {
+        /* ofp_group_type */
+        type enumeration {
+            enum OFPGT_ALL {
+              value 0;
+              description "All (multicast/broadcast) group.";
+            }
+            enum OFPGT_SELECT {
+              value 1;
+              description "Select group.";
+            }
+            enum OFPGT_INDIRECT {
+              value 2;
+              description "Indirect group.";
+            }
+            enum OFPGT_FF {
+              value 3;
+              description "Fast failover group.";
+            }
+        }
+    }
+
+    typedef table-values {
+        /* ofp_table */
+        type enumeration {
+            enum OFPTT_MAX {
+              value 254; // 0xfe
+              description "Last usable table number.";
+            }
+            enum OFPTT_ALL {
+              value 255; // 0xff
+              description "Wildcard table used for table config,
+                           flow stats and flow deletes.";
+            }
+        }
+    }
+
+    typedef group {
+        /* ofp_group - Group numbering. Groups can use any number up to OFPG_MAX.*/
+        type enumeration {
+            enum OFPG_MAX {
+                value -256; //0xffffff00
+                description "Last usable group number";
+            }
+            /* Fake groups. */
+            enum OFPG_ALL {
+                value -4; //0xfffffffc
+                description "Represents all groups for group delete commands";
+            }
+            enum OFPG_ANY {
+                value -1; //0xffffffff
+                description "Wildcard group used only for flow stats requests.
+                            Selects all flows regardless of group (including flows with no group)";
+            }
+        }
+    }
+
+    typedef multipart-request-flags {
+        description "enum ofp_multipart_request_flags ";
+        type bits {
+            bit OFPMPF_REQ_MORE {
+                description "More requests to follow.";
+                position 0;
+            }
+        }
+    }
+
+    typedef multipart-type {
+        type enumeration {
+            enum OFPMP_DESC {
+              value 0;
+              description "Description of this OpenFlow switch.
+                 The request body is empty.
+                 The reply body is struct ofp_desc.";
+            }
+            enum OFPMP_FLOW {
+              value 1;
+              description "Individual flow statistics.
+                 The request body is struct ofp_flow_stats_request.
+                 The reply body is an array of struct ofp_flow_stats.";
+            }
+            enum OFPMP_AGGREGATE {
+              value 2;
+              description "Aggregate flow statistics.
+                 The request body is struct ofp_aggregate_stats_request.
+                 The reply body is struct ofp_aggregate_stats_reply.";
+            }
+            enum OFPMP_TABLE {
+              value 3;
+              description "Flow table statistics.
+                 The request body is empty.
+                 The reply body is an array of struct ofp_table_stats.";
+            }
+            enum OFPMP_PORT_STATS {
+              value 4;
+              description "Port statistics.
+                 The request body is struct ofp_port_stats_request.
+                 The reply body is an array of struct ofp_port_stats.";
+            }
+            enum OFPMP_QUEUE {
+              value 5;
+              description "Queue statistics for a port
+                 The request body is struct ofp_queue_stats_request.
+                 The reply body is an array of struct ofp_queue_stats";
+            }
+            enum OFPMP_GROUP {
+              value 6;
+              description "Group counter statistics.
+                 The request body is struct ofp_group_stats_request.
+                 The reply is an array of struct ofp_group_stats.";
+            }
+            enum OFPMP_GROUP_DESC {
+              value 7;
+              description "Group description.
+                 The request body is empty.
+                 The reply body is an array of struct ofp_group_desc.";
+            }
+            enum OFPMP_GROUP_FEATURES {
+              value 8;
+              description "Group features.
+                 The request body is empty.
+                 The reply body is struct ofp_group_features.";
+            }
+            enum OFPMP_METER {
+              value 9;
+              description "Meter statistics.
+                 The request body is struct ofp_meter_multipart_requests.
+                 The reply body is an array of struct ofp_meter_stats.";
+            }
+            enum OFPMP_METER_CONFIG {
+              value 10;
+              description "Meter configuration.
+                 The request body is struct ofp_meter_multipart_requests.
+                 The reply body is an array of struct ofp_meter_config.";
+            }
+            enum OFPMP_METER_FEATURES {
+              value 11;
+              description "Meter features.
+                 The request body is empty.
+                 The reply body is struct ofp_meter_features.";
+            }
+            enum OFPMP_TABLE_FEATURES {
+              value 12;
+              description "Table features.
+                 The request body is either empty or contains an array of
+                 struct ofp_table_features containing the controller’s
+                 desired view of the switch. If the switch is unable to
+                 set the specified view an error is returned.
+                 The reply body is an array of struct ofp_table_features.";
+            }
+            enum OFPMP_PORT_DESC {
+              value 13;
+              description "Port description.
+                 The request body is empty.
+                 The reply body is an array of struct ofp_port.";
+            }
+            enum OFPMP_EXPERIMENTER {
+              value 65535; //0xffff
+              description "Experimenter extension.
+                 The request and reply bodies begin with
+                 struct ofp_experimenter_multipart_header.
+                 The request and reply bodies are otherwise experimenter-defined.";
+            }
+        }
+    }
+
+    typedef queue-properties {
+        /* ofp_queue_properties */
+        type enumeration {
+            enum OFPQT_NONE {
+              value 0;
+              description "No property defined for queue (default).";
+            }
+            enum OFPQT_MIN_RATE {
+                value 1;
+                description "Minimum datarate guaranteed.";
+            }
+            enum OFPQT_MAX_RATE {
+                value 2;
+                description "Maximum datarate.";
+            }
+            enum OFPQT_EXPERIMENTER {
+                value 65535; // 0xffff
+                description "Experimenter defined property.";
+            }
+        }
+    }
+
+    typedef controller-role {
+        /* ofp_controller_role */
+        type enumeration {
+            enum OFPCR_ROLE_NOCHANGE {
+              value 0;
+              description "Don’t change current role.";
+            }
+            enum OFPCR_ROLE_EQUAL {
+              value 1;
+              description "Default role, full access.";
+            }
+            enum OFPCR_ROLE_MASTER {
+              value 2;
+              description "Full access, at most one master.";
+            }
+            enum OFPCR_ROLE_SLAVE {
+              value 3;
+              description "Read-only access.";
+            }
+        }
+    }
+
+    typedef packet-in-reason {
+        /* ofp_packet_in_reason */
+        type enumeration {
+            enum OFPR_NO_MATCH {
+              value 0;
+              description "No matching flow (table-miss flow entry). ";
+            }
+            enum OFPR_ACTION {
+              value 1;
+              description "Action explicitly output to controller. ";
+            }
+            enum OFPR_INVALID_TTL {
+              value 2;
+              description "Packet has invalid TTL ";
+            }
+        }
+    }
+
+    typedef action-type {
+        /* ofp_action_type */
+        type bits {
+            bit OFPAT_OUTPUT {
+                position 0;
+                /* Output to switch port. */
+            }
+            bit OFPAT_COPY_TTL_OUT {
+                position 1;
+                /* Copy TTL "outwards" -- from next-to-outermost to outermost */
+            }
+            bit OFPAT_COPY_TTL_IN {
+                position 2;
+                /* Copy TTL "inwards" -- from outermost to next-to-outermost */
+            }
+            bit OFPAT_SET_MPLS_TTL {
+                position 3;
+                /* MPLS TTL */
+            }
+            bit OFPAT_DEC_MPLS_TTL {
+                position 4;
+                /* Decrement MPLS TTL */
+            }
+            bit OFPAT_PUSH_VLAN {
+                position 5;
+                /* Push a new VLAN tag */
+            }
+            bit OFPAT_POP_VLAN {
+                position 6;
+                /* Pop the outer VLAN tag */
+            }
+            bit OFPAT_PUSH_MPLS {
+                position 7;
+                /* Push a new MPLS tag */
+            }
+            bit OFPAT_POP_MPLS {
+                position 8;
+                /* Pop the outer MPLS tag */
+            }
+            bit OFPAT_SET_QUEUE {
+                position 9;
+                /* Set queue id when outputting to a port */
+            }
+            bit OFPAT_GROUP {
+                position 10;
+                /* Apply group. */
+            }
+            bit OFPAT_SET_NW_TTL {
+                position 11;
+                /* IP TTL. */
+            }
+            bit OFPAT_DEC_NW_TTL {
+                position 12;
+                /* Decrement IP TTL. */
+            }
+            bit OFPAT_SET_FIELD {
+                position 13;
+                /* Set a header field using OXM TLV format. */
+            }
+            bit OFPAT_PUSH_PBB {
+                position 14;
+                /* Push a new PBB service tag (I-TAG) */
+            }
+            bit OFPAT_POP_PBB {
+                position 15;
+                /* Pop the outer PBB service tag (I-TAG) */
+            }
+            bit OFPAT_EXPERIMENTER {
+                position 16;
+            }
+        }
+    }
+
+    typedef meter-mod-command {
+        /* ofp_meter_mod_command */
+        type enumeration {
+            enum OFPMC_ADD {
+              description "New meter. ";
+            }
+            enum OFPMC_MODIFY {
+              description "Modify specified meter. ";
+            }
+            enum OFPMC_DELETE {
+              description "Delete specified meter. ";
+            }
+        }
+    }
+
+    typedef meter-flags {
+        /* ofp_meter_flags */
+        type bits {
+            bit OFPMF_KBPS {
+                position 0;
+                /* Rate value in kb/s (kilo-bit per second). */
+            }
+            bit OFPMF_PKTPS {
+                position 1;
+                /* Rate value in packet/sec. */
+            }
+            bit OFPMF_BURST {
+                position 2;
+                /* Do burst size. */
+            }
+            bit OFPMF_STATS {
+                position 3;
+                /* Collect statistics. */
+            }
+        }
+    }
+
+    typedef meter-band-type {
+        /* ofp_meter_band_type */
+        type enumeration {
+            enum OFPMBT_DROP {
+              value 1;
+              description "Drop packet. ";
+            }
+            enum OFPMBT_DSCP_REMARK {
+              value 2;
+              description "Remark DSCP in the IP header. ";
+            }
+            enum OFPMBT_EXPERIMENTER {
+              value 65535; //0xFFFF
+              description "Experimenter meter band. ";
+            }
+        }
+    }
+
+    typedef meter-band-type-bitmap {
+        /* ofp_meter_band_type */
+        type bits {
+            bit OFPMBT_DROP {
+              position 1;
+              description "Drop packet. ";
+            }
+            bit OFPMBT_DSCP_REMARK {
+              position 2;
+              description "Remark DSCP in the IP header. ";
+            }
+        }
+    }
+
+    typedef meter {
+        description "Meter numbering. Flow meters can use any number up to OFPM_MAX";
+        type enumeration {
+            enum OFPM_MAX {
+                value -65536; //0xffff0000
+                description "Last usable meter number";
+            }
+            /* Virtual meters. */
+            enum OFPM_SLOWPATH {
+                value -3; //0xfffffffd
+                description "Meter for slow datapath";
+            }
+            enum OFPM_CONTROLLER {
+                value -2; //0xfffffffe
+                description "Meter for controller connection";
+            }
+            enum OFPM_ALL {
+                value -1; //0xffffffff
+                description "Represents all meters for stat requests commands";
+            }
+        }
+    }
+
+    typedef table-config {
+        /* ofp_table_config */
+        type bits {
+            bit OFPTC_DEPRECATED_MASK {
+                /* Deprecated bits */
+                position 3;
+            }
+        }
+    }
+
+    typedef table-features-prop-type {
+        type enumeration {
+            enum OFPTFPT_INSTRUCTIONS {
+                value 0;
+                description "Instructions property.";
+            }
+            enum OFPTFPT_INSTRUCTIONS_MISS {
+                value 1;
+                description "Instructions for table-miss.";
+            }
+            enum OFPTFPT_NEXT_TABLES {
+                value 2;
+                description "Next Table property.";
+            }
+            enum OFPTFPT_NEXT_TABLES_MISS {
+                value 3;
+                description "Next Table for table-miss.";
+            }
+            enum OFPTFPT_WRITE_ACTIONS {
+                value 4;
+                description "Write Actions property.";
+            }
+            enum OFPTFPT_WRITE_ACTIONS_MISS {
+                value 5;
+                description "Write Actions for table-miss.";
+            }
+            enum OFPTFPT_APPLY_ACTIONS {
+                value 6;
+                description "Apply Actions property.";
+            }
+            enum OFPTFPT_APPLY_ACTIONS_MISS {
+                value 7;
+                description "Apply Actions for table-miss.";
+            }
+            enum OFPTFPT_MATCH {
+                value 8;
+                description "Match property.";
+            }
+            enum OFPTFPT_WILDCARDS {
+                value 10;
+                description "Wildcards property.";
+            }
+            enum OFPTFPT_WRITE_SETFIELD {
+                value 12;
+                description "Write Set-Field property.";
+            }
+            enum OFPTFPT_WRITE_SETFIELD_MISS {
+                value 13;
+                description "Write Set-Field for table-miss.";
+            }
+            enum OFPTFPT_APPLY_SETFIELD {
+                value 14;
+                description "Apply Set-Field property.";
+            }
+            enum OFPTFPT_APPLY_SETFIELD_MISS {
+                value 15;
+                description "Apply Set-Field for table-miss.";
+            }
+            enum OFPTFPT_EXPERIMENTER {
+                value 65534;
+                description "Experimenter property.";
+            }
+            enum OFPTFPT_EXPERIMENTER_MISS {
+                value 65535; //0xffff
+                description "Experimenter for table-miss.";
+            }
+        }
+    }
+
+    typedef group-types {
+        /* ofp_group_type */
+        type bits {
+            bit OFPGT_ALL {
+                description "All (multicast/broadcast) group.";
+                position 0;
+            }
+            bit OFPGT_SELECT {
+                description "Select group.";
+                position 1;
+            }
+            bit OFPGT_INDIRECT {
+                description "Indirect group.";
+                position 2;
+            }
+            bit OFPGT_FF {
+                description "Fast failover group.";
+                position 3;
+            }
+        }
+    }
+
+    typedef group-capabilities {
+        /* ofp_group_capabilities */
+        type bits {
+            bit OFPGFC_SELECT_WEIGHT {
+                description "Support weight for select groups";
+                position 0;
+            }
+            bit OFPGFC_SELECT_LIVENESS {
+                description "Support liveness for select groups";
+                position 1;
+            }
+            bit OFPGFC_CHAINING {
+                description "Support chaining group";
+                position 2;
+            }
+            bit OFPGFC_CHAINING_CHECKS {
+                description "Check chaining for loops and delete";
+                position 3;
+            }
+        }
+    }
+
+    typedef ipv6-exthdr-flags {
+        description "Bit definitions for IPv6 Extension Header pseudo-field.";
+        type bits {
+            bit nonext {
+                description "<No next header> encountered.";
+                position 0;
+            }
+            bit esp {
+                description "Encrypted Sec Payload header present.";
+                position 1;
+            }
+            bit auth {
+                description "Authentication header present.";
+                position 2;
+            }
+            bit dest {
+                description "1 or 2 dest headers present.";
+                position 3;
+            }
+            bit frag {
+                description "Fragment header present.";
+                position 4;
+            }
+            bit router {
+                description "Router header present.";
+                position 5;
+            }
+            bit hop {
+                description "Hop-by-hop header present.";
+                position 6;
+            }
+            bit unrep {
+                description "Unexpected repeats encountered.";
+                position 7;
+            }
+            bit unseq {
+                description "Unexpected sequencing encountered.";
+                position 8;
+            }
+        }
+    }
+
+// OPENFLOW v1.0 STRUCTURES
+    // Structures under this line are needed to support OpenFlow version 1.0
+    // wire protocol 0x01;
+
+    typedef error-type-v10 {
+        type enumeration {
+            enum HELLO_FAILED {
+                value 0;
+                description "Hello Protocol failed.";
+            }
+            enum BAD_REQUEST {
+                value 1;
+                description "Request was not understood.";
+            }
+            enum BAD_ACTION {
+                value 2;
+                description "Error in action description.";
+            }
+            enum FLOW_MOD_FAILED {
+                value 3;
+                description "Problem modifying flow entry.";
+            }
+            enum PORT_MOD_FAILED {
+                value 4;
+                description "Port mod request failed.";
+            }
+            enum QUEUE_OP_FAILED {
+                value 5;
+                description "Queue operation failed.";
+            }
+        }
+    }
+
+    typedef hello-failed-code-v10 {
+        type enumeration {
+            enum INCOMPATIBLE {
+                value 0;
+                description "Hello Protocol failed.";
+            }
+            enum EPERM {
+                value 1;
+                description "Request was not understood.";
+            }
+        }
     }
 
     }
 
-    typedef controller-role {
-        /* ofp_controller_role */
+    typedef bad-request-code-v10 {
         type enumeration {
         type enumeration {
-            enum OFPCR_ROLE_NOCHANGE {
-              value 0;
-              description "Don’t change current role.";
+            enum BAD_VERSION {
+                value 0;
             }
             }
-            enum OFPCR_ROLE_EQUAL {
-              value 1;
-              description "Default role, full access.";
+            enum BAD_TYPE {
+                value 1;
             }
             }
-            enum OFPCR_ROLE_MASTER {
-              value 2;
-              description "Full access, at most one master.";
+            enum BAD_STAT {
+                value 2;
             }
             }
-            enum OFPCR_ROLE_SLAVE {
-              value 3;
-              description "Read-only access.";
+            enum BAD_VENDOR {
+                value 3;
+            }
+            enum BAD_SUBTYPE {
+                value 4;
+            }
+            enum EPERM {
+                value 5;
+            }
+            enum BAD_LEN {
+                value 6;
+            }
+            enum BUFFER_EMPTY {
+                value 7;
+            }
+            enum BUFFER_UNKNOWN {
+                value 8;
             }
         }
     }
 
             }
         }
     }
 
-    typedef packet-in-reason {
-        /* ofp_packet_in_reason */
+    typedef bad-action-code-v10 {
         type enumeration {
         type enumeration {
-            enum OFPR_NO_MATCH {
-              value 0;
-              description "No matching flow (table-miss flow entry). ";
+            enum BAD_TYPE {
+                value 0;
             }
             }
-            enum OFPR_ACTION {
-              value 1;
-              description "Action explicitly output to controller. ";
+            enum BAD_LEN {
+                value 1;
             }
             }
-            enum OFPR_INVALID_TTL {
-              value 2;
-              description "Packet has invalid TTL ";
+            enum VENDOR {
+                value 2;
+            }
+            enum BAD_VENDOR_TYPE {
+                value 3;
+            }
+            enum BAD_OUT_PORT {
+                value 4;
+            }
+            enum BAD_ARGUMENT {
+                value 5;
+            }
+            enum EPERM {
+                value 6;
+            }
+            enum TOO_MANY {
+                value 7;
+            }
+            enum BAD_QUEUE {
+                value 8;
             }
         }
     }
 
             }
         }
     }
 
-    typedef meter-mod-command {
-        /* ofp_meter_mod_command */
+    typedef flow-mod-failed-code-v10 {
         type enumeration {
         type enumeration {
-            enum OFPMC_ADD {
-              description "New meter. ";
+            enum ALL_TABLES_FULL {
+                value 0;
             }
             }
-            enum OFPMC_MODIFY {
-              description "Modify specified meter. ";
+            enum OVERLAP {
+                value 1;
             }
             }
-            enum OFPMC_DELETE {
-              description "Delete specified meter. ";
+            enum EPERM {
+                value 2;
+            }
+            enum BAD_EMERG_TIMEOUT {
+                value 3;
+            }
+            enum BAD_COMMAND {
+                value 4;
+            }
+            enum UNSUPPORTED {
+                value 5;
             }
         }
     }
 
             }
         }
     }
 
-    typedef meter-flags {
-        /* ofp_meter_flags */
+    typedef port-mod-failed-code-v10 {
+        type enumeration {
+            enum BAD_PORT {
+                value 0;
+            }
+            enum BAD_HW_ADDR {
+                value 1;
+            }
+        }
+    }
+
+    typedef queue-op-failed-code-v10 {
+        type enumeration {
+            enum BAD_PORT {
+                value 0;
+            }
+            enum BAD_QUEUE {
+                value 1;
+            }
+            enum EPERM {
+                value 2;
+            }
+        }
+    }
+
+    typedef port-number-values-v10 {
+        description "Port numbering. Physical ports are numbered starting from 1.";
+        type enumeration {
+            enum MAX {
+                value 65280; // 0xff00
+            }
+            enum IN_PORT {
+                description "Send the packet out the input port. This
+                            virtual port must be explicitly used
+                            in order to send back out of the input
+                            port.";
+                value 65528; // 0xfff8
+            }
+            enum TABLE {
+                description "Perform actions in flow table.
+                            NB: This can only be the destination
+                            port for packet-out messages.";
+                value 65529; // 0xfff9
+            }
+            enum NORMAL {
+                description "Process with normal L2/L3 switching.";
+                value 65530; // 0xfffa
+            }
+            enum FLOOD {
+                description "All physical ports except input port and
+                            those disabled by STP.";
+                value 65531; // 0xfffb
+            }
+            enum ALL {
+                description "All physical ports except input port.";
+                value 65532; // 0xfffc
+            }
+            enum CONTROLLER {
+                description "Send to controller.";
+                value 65533; // 0xfffd
+            }
+            enum LOCAL {
+                description "Local openflow \"port\".";
+                value 65534; // 0xfffe
+            }
+            enum NONE {
+                description "Not associated with a physical port.";
+                value 65535; // 0xffff
+            }
+        }
+    }
+
+    typedef port-config-v10 {
+        description
+           "Flags to indicate behavior of the physical port. These flags are
+            describe the current configuration and used port_mod message
+            to configure the port's behavior.";
         type bits {
         type bits {
-            bit OFPMF_KBPS {
+            bit port-down {
+                description " Port is administratively down.";
                 position 0;
                 position 0;
-                /* Rate value in kb/s (kilo-bit per second). */
             }
             }
-            bit OFPMF_PKTPS {
+            bit no-stp {
+                description "Disable 802.1D spanning tree on port.";
                 position 1;
                 position 1;
-                /* Rate value in packet/sec. */
             }
             }
-            bit OFPMF_BURST {
+            bit no-recv {
+                description " Drop all packets received by port.";
                 position 2;
                 position 2;
-                /* Do burst size. */
             }
             }
-            bit OFPMF_STATS {
+            bit no-recv-stp {
+                description " Drop received 802.1D STP packets.";
                 position 3;
                 position 3;
-                /* Collect statistics. */
+            }
+            bit no-flood {
+                description " Do not include this port when flooding.";
+                position 4;
+            }
+            bit no-fwd {
+                description " Drop packets forwarded to port.";
+                position 5;
+            }
+            bit no-packet-in {
+                description "Do not send packet-in msgs for port.";
+                position 6;
             }
         }
     }
 
             }
         }
     }
 
-    typedef meter-band-type {
-        /* ofp_meter_band_type */
-        type enumeration {
-            enum OFPMBT_DROP {
-              value 1;
-              description "Drop packet. ";
+    typedef port-state-v10 {
+        description "Current state of the physical port. These are not configurable from
+                    the controller.";
+        type bits {
+            bit link_down {
+                description "No physical link present.";
+                position 0;
             }
             }
-            enum OFPMBT_DSCP_REMARK {
-              value 2;
-              description "Remark DSCP in the IP header. ";
+            bit blocked {
+                description "Port is blocked";
+                position 1;
             }
             }
-            enum OFPMBT_EXPERIMENTER {
-              value 65535; //0xFFFF
-              description "Experimenter meter band. ";
+            bit live {
+                description "Live for Fast Failover Group.";
+                position 2;
+            }
+            bit stp_listen {
+                description "Not learning or relaying frames.";
+            }
+            bit stp_learn {
+                description "Learning but not relaying frames.";
+            }
+            bit stp_forward {
+                description "Learning and relaying frames.";
+            }
+            bit stp_block {
+                description "Not part of spanning tree.";
+            }
+            bit stp_mask {
+                description "Bit mask for OFPPS_STP_* values.";
             }
         }
     }
 
             }
         }
     }
 
-    typedef table-config {
-        /* ofp_table_config */
+    typedef port-features-v10 {
+        description "Features of ports available in datapath.";
+        reference "ofp_port_features";
         type bits {
         type bits {
-            bit OFPTC_DEPRECATED_MASK {
-                /* Deprecated bits */
+            bit _10mb-hd {
+                position 0;
+                description "10 Mb half-duplex rate support.";
+            }
+            bit _10mb-fd {
+                position 1;
+                description "10 Mb full-duplex rate support.";
+            }
+            bit _100mb-hd {
+                position 2;
+                description "100 Mb half-duplex rate support.";
+            }
+            bit _100mb-fd {
                 position 3;
                 position 3;
+                description "100 Mb full-duplex rate support.";
             }
             }
-        }
-    }
-
-    typedef table-features-prop-type {
-        type enumeration {
-            enum OFPTFPT_INSTRUCTIONS {
-                value 0; 
-                description "Instructions property.";
+            bit _1gb-hd {
+                position 4;
+                description "1 Gb half-duplex rate support.";
             }
             }
-            enum OFPTFPT_INSTRUCTIONS_MISS {
-                value 1; 
-                description "Instructions for table-miss.";
+            bit _1gb-fd {
+                position 5;
+                description "1 Gb full-duplex rate support.";
             }
             }
-            enum OFPTFPT_NEXT_TABLES {
-                value 2; 
-                description "Next Table property.";
+            bit _10gb-fd {
+                position 6;
+                description "10 Gb full-duplex rate support.";
             }
             }
-            enum OFPTFPT_NEXT_TABLES_MISS {
-                value 3; 
-                description "Next Table for table-miss.";
+            bit copper {
+                position 7;
+                description "Copper medium.";
             }
             }
-            enum OFPTFPT_WRITE_ACTIONS {
-                value 4; 
-                description "Write Actions property.";
+            bit fiber {
+                position 8;
+                description "Fiber medium.";
             }
             }
-            enum OFPTFPT_WRITE_ACTIONS_MISS {
-                value 5; 
-                description "Write Actions for table-miss.";
+            bit autoneg {
+                position 9;
+                description "Auto-negotiation.";
             }
             }
-            enum OFPTFPT_APPLY_ACTIONS {
-                value 6; 
-                description "Apply Actions property.";
+            bit pause {
+                position 10;
+                description "Pause.";
             }
             }
-            enum OFPTFPT_APPLY_ACTIONS_MISS {
-                value 7; 
-                description "Apply Actions for table-miss.";
+            bit pause-asym {
+                position 11;
+                description "Asymmetric pause.";
             }
             }
-            enum OFPTFPT_MATCH {
-                value 8; 
-                description "Match property.";
+        }
+    }
+
+    typedef capabilities-v10 {
+        type bits {
+            bit OFPC_FLOW_STATS {
+                position 0;
+                description "Flow statistics.";
             }
             }
-            enum OFPTFPT_WILDCARDS {
-                value 10; 
-                description "Wildcards property.";
+            bit OFPC_TABLE_STATS {
+                position 1;
+                description "Table statistics.";
             }
             }
-            enum OFPTFPT_WRITE_SETFIELD {
-                value 12; 
-                description "Write Set-Field property.";
+            bit OFPC_PORT_STATS {
+                position 2;
+                description "Port statistics.";
             }
             }
-            enum OFPTFPT_WRITE_SETFIELD_MISS {
-                value 13; 
-                description "Write Set-Field for table-miss.";
+            bit OFPC_STP {
+                position 3;
+                description "802.1d spanning tree.";
             }
             }
-            enum OFPTFPT_APPLY_SETFIELD {
-                value 14; 
-                description "Apply Set-Field property.";
+            bit OFPC_RESERVED {
+                position 4;
+                description "Reserved, must be zero.";
             }
             }
-            enum OFPTFPT_APPLY_SETFIELD_MISS {
-                value 15; 
-                description "Apply Set-Field for table-miss.";
+            bit OFPC_IP_REASM {
+                position 5;
+                description "Can reassemble IP fragments.";
             }
             }
-            enum OFPTFPT_EXPERIMENTER {
-                value 65534; 
-                description "Experimenter property.";
+            bit OFPC_QUEUE_STATS {
+                position 6;
+                description "Queue statistics.";
             }
             }
-            enum OFPTFPT_EXPERIMENTER_MISS {
-                value 65535; //0xffff 
-                description "Experimenter for table-miss.";
+            bit OFPC_ARP_MATCH_IP {
+                position 8;
+                description "Match IP addresses in ARP pkts.";
             }
         }
     }
 
             }
         }
     }
 
-    typedef group-types {
-        /* ofp_group_type */
+    typedef flow-mod-flags-v10 {
+        /* ofp_flow_mod_flags */
         type bits {
         type bits {
-            bit OFPGT_ALL {
-                /* All (multicast/broadcast) group. */
+            bit OFPFF_SEND_FLOW_REM {
                 position 0;
                 position 0;
+                description "Send flow removed message when flow expires or is deleted.";
             }
             }
-            bit OFPGT_SELECT {
-                /* Select group. */
+            bit OFPFF_CHECK_OVERLAP {
                 position 1;
                 position 1;
+                description "Check for overlapping entries first.";
             }
             }
-            bit OFPGT_INDIRECT {
-                /* Indirect group. */
+            bit OFPFF_EMERG {
                 position 2;
                 position 2;
+                description "Reset flow packet and byte counts.";
             }
             }
-            bit OFPGT_FF {
-                /* Fast failover group. */
+        }
+    }
+
+    typedef action-type-v10 {
+        /* ofp_action_type */
+        type bits {
+            bit OFPAT_OUTPUT {
+                position 0;
+                description "Output to switch port.";
+            }
+            bit OFPAT_SET_VLAN_VID {
+                position 1;
+                description "Set the 802.1q VLAN id.";
+            }
+            bit OFPAT_SET_VLAN_PCP {
+                position 2;
+                description "Set the 802.1q priority.";
+            }
+            bit OFPAT_STRIP_VLAN {
                 position 3;
                 position 3;
+                description "Strip the 802.1q header.";
+            }
+            bit OFPAT_SET_DL_SRC {
+                position 4;
+                description "Ethernet source address.";
+            }
+            bit OFPAT_SET_DL_DST {
+                position 5;
+                description "Ethernet destination address.";
+            }
+            bit OFPAT_SET_NW_SRC {
+                position 6;
+                description "IP source address.";
+            }
+            bit OFPAT_SET_NW_DST {
+                position 7;
+                description "IP destination address.";
+            }
+            bit OFPAT_SET_NW_TOS {
+                position 8;
+                description "IP ToS (DSCP field, 6 bits).";
+            }
+            bit OFPAT_SET_TP_SRC {
+                position 9;
+                description "TCP/UDP source port.";
+            }
+            bit OFPAT_SET_TP_DST {
+                position 10;
+                description "TCP/UDP destination port.";
+            }
+            bit OFPAT_ENQUEUE {
+                position 11;
+                description "Output to queue.";
+            }
+            bit OFPAT_VENDOR {
+                position 12;
+                description "Experimenter in later versions.";
             }
         }
     }
 
             }
         }
     }
 
-    typedef group-capabilities {
-        /* ofp_group_capabilities */
+    typedef flow-wildcards-v10 {
+        /* ofp_flow_wildcards */
+        description "Flow wildcards - NW_SRC_MASK & NW_DST_MASK are handled separately";
         type bits {
         type bits {
-            bit OFPGFC_SELECT_WEIGHT {
-                /* Support weight for select groups */
+            bit IN_PORT {
+                description "Switch input port.";
                 position 0;
             }
                 position 0;
             }
-            bit OFPGFC_SELECT_LIVENESS {
-                /* Support liveness for select groups */
+            bit DL_VLAN {
+                description "VLAN id.";
                 position 1;
             }
                 position 1;
             }
-            bit OFPGFC_CHAINING {
-                /* Support chaining groups */
+            bit DL_SRC {
+                description "Ethernet source address.";
                 position 2;
             }
                 position 2;
             }
-            bit OFPGFC_CHAINING_CHECKS {
-                /* Check chaining for loops and delete */
+            bit DL_DST {
+                description "Ethernet destination address.";
                 position 3;
             }
                 position 3;
             }
+            bit DL_TYPE {
+                description "Ethernet frame type.";
+                position 4;
+            }
+            bit NW_PROTO {
+                description "IP protocol.";
+                position 5;
+            }
+            bit TP_SRC {
+                description "TCP/UDP source port.";
+                position 6;
+            }
+            bit TP_DST {
+                description "TCP/UDP destination port.";
+                position 7;
+            }
+            bit DL_VLAN_PCP {
+                description "VLAN priority.";
+                position 20;
+            }
+            bit NW_TOS {
+                description "IP ToS (DSCP field, 6 bits).";
+                position 21;
+            }
         }
     }
 
         }
     }