Updated experimenter model
[openflowjava.git] / openflow-protocol-api / src / main / yang / openflow-protocol.yang
index 7a71c1ce89843cb9dc63f8d21fd6effbc190e670..32070d14cf900c973825c3fe47985df02d7e7e3a 100644 (file)
@@ -1,4 +1,12 @@
-module openflow-protocol {\r
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
\r
+ module openflow-protocol {\r
     namespace "urn:opendaylight:openflow:protocol";\r
     prefix "ofproto";\r
 \r
@@ -14,130 +22,113 @@ module openflow-protocol {
     }\r
 \r
     // Generic Structures\r
-        grouping port {\r
-            // reference "ofp_port";\r
-            leaf port-no { \r
-                // reference "ofp_port.port_no"; \r
+        grouping port-grouping {\r
+            reference "ofp_port";\r
+            leaf port-no {\r
                 type uint32;\r
             }\r
-            leaf hw-addr { \r
-                // reference "ofp_port.hw_addr"; \r
+            leaf hw-addr {\r
                 type yang:mac-address;\r
             }\r
-            leaf name { \r
-                // reference "ofp_port.name"; \r
+            leaf name {\r
                 type string;\r
             }\r
-            leaf config { \r
-                // reference "ofp_port.config"; \r
+            leaf config {\r
+                description "Bitmap of OFPPC_* flags.";\r
                 type oft:port-config;\r
             }\r
-            leaf state { \r
-                // reference "ofp_port.state"; \r
+            leaf state {\r
+                description "Bitmap of OFPPS_* flags.";\r
                 type oft:port-state;\r
             }\r
-            leaf current-features { \r
+            leaf current-features {\r
                 description "Current features.";\r
-                // reference "ofp_port.curr"; \r
-                type oft:port-features; \r
+                type oft:port-features;\r
             }\r
-            leaf advertised-features { \r
+            leaf advertised-features {\r
                 description "Features being advertised by the port.";\r
-                // reference "ofp_port.advertised"; \r
-                type oft:port-features; \r
+                type oft:port-features;\r
             }\r
-            leaf supported-features { \r
+            leaf supported-features {\r
                 description "Features supported by the port.";\r
-                // reference "ofp_port.supported"; \r
-                type oft:port-features; \r
+                type oft:port-features;\r
             }\r
-            leaf peer-features { \r
+            leaf peer-features {\r
                 description "Features advertised by peer.";\r
-                // reference "ofp_port.peer"; \r
                 type oft:port-features; \r
             }\r
-            leaf curr-speed { \r
+            leaf curr-speed {\r
                 description "Current port bitrate in kbps.";\r
-                // reference "ofp_port.curr_speed"; \r
-                type uint32; \r
+                type uint32;\r
                 units "kbps";\r
             }\r
-            leaf max-speed { \r
+            leaf max-speed {\r
                 description "Max port bitrate in kbps";\r
-                // reference "ofp_port.max_speed"; \r
                 type uint32;\r
-                units "kbps"; \r
+                units "kbps";\r
             }\r
-            \r
+\r
             // OF1.0 structures\r
-            leaf config-v10 { \r
-                // reference "ofp_port.config"; \r
+            leaf config-v10 {\r
                 type oft:port-config-v10;\r
             }\r
             leaf state-v10 { \r
-                // reference "ofp_port.state"; \r
                 type oft:port-state-v10;\r
             }\r
-            leaf current-features-v10 { \r
+            leaf current-features-v10 {\r
                 description "Current features.";\r
-                // reference "ofp_port.curr"; \r
-                type oft:port-features-v10; \r
+                type oft:port-features-v10;\r
             }\r
-            leaf advertised-features-v10 { \r
+            leaf advertised-features-v10 {\r
                 description "Features being advertised by the port.";\r
-                // reference "ofp_port.advertised"; \r
-                type oft:port-features-v10; \r
+                type oft:port-features-v10;\r
             }\r
-            leaf supported-features-v10 { \r
+            leaf supported-features-v10 {\r
                 description "Features supported by the port.";\r
-                // reference "ofp_port.supported"; \r
-                type oft:port-features-v10; \r
+                type oft:port-features-v10;\r
             }\r
             leaf peer-features-v10 { \r
                 description "Features advertised by peer.";\r
-                // reference "ofp_port.peer"; \r
                 type oft:port-features-v10; \r
             }\r
         }\r
-        \r
-        grouping match-grouping {\r
-            container match {\r
-                leaf type {\r
-                    type identityref {\r
-                        base oft:match-type-base;\r
-                    }\r
-                }\r
-                uses oxm:oxm-fields;\r
-            }\r
-        }\r
 \r
-        grouping buckets {\r
+        grouping buckets-grouping {\r
                 list buckets-list {\r
-                    uses bucket;\r
+                    uses bucket-grouping;\r
                 }\r
             }\r
-            \r
-            grouping bucket {\r
+\r
+            grouping bucket-grouping {\r
+                description "Bucket for use in groups.";\r
                 leaf weight {\r
+                    description "Relative weight of bucket. Only\r
+                                defined for select groups.";\r
                     type uint16;\r
                 }\r
                 leaf watch-port {\r
+                    description "Port whose state affects whether this\r
+                                bucket is live. Only required for fast\r
+                                failover groups.";\r
                     type oft:port-number;\r
                 }\r
                 leaf watch-group {\r
+                    description "Group whose state affects whether this\r
+                                bucket is live. Only required for fast\r
+                                failover groups.";\r
                     type uint32;\r
                 }\r
-                \r
-                uses ofaction:actions;\r
+\r
+                uses ofaction:actions-grouping;\r
             }\r
             \r
         container table-features-properties-container {\r
-            uses table-features-properties;\r
+            uses table-features-properties-grouping;\r
         }\r
 \r
-        grouping table-features-properties {\r
+        grouping table-features-properties-grouping {\r
             list table-feature-properties {\r
-                key "type";\r
+                config false;\r
                 leaf type {\r
                     type oft:table-features-prop-type;\r
                 }\r
@@ -147,25 +138,25 @@ module openflow-protocol {
     // # MESSAGE Structures\r
         /* Immutable messages. */\r
             grouping ofHeader {\r
-                //reference "ofpt_header struct in Openflow Switch 1.3 Spec"\r
+                reference "ofp_header struct in Openflow Switch 1.3 Spec";\r
                 leaf version {\r
                     type uint8;\r
-                    //reference "OpenFlow Header - OFP_VERSION";\r
+                    description "OpenFlow version";\r
                 }\r
                 leaf xid {\r
                     type uint32;\r
-                    //reference "OpenFlow Header - transaction id";\r
+                    description "Transaction ID";\r
                 }\r
             }\r
             grouping ofHelloElementHeader {\r
-                //reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"\r
+                reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec";\r
                 leaf type {\r
                     type oft:hello-element-type;\r
                     //reference "OpenFlow Header element type - OFPHET_*";\r
                 }\r
             }\r
             grouping hello {\r
-                // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";\r
                 /* Symmetric message */\r
                 uses ofHeader;\r
                 \r
@@ -178,7 +169,7 @@ module openflow-protocol {
                 }\r
             }\r
             grouping error {\r
-                // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";\r
                 /* Symmetric message */\r
                 uses ofHeader;\r
                 \r
@@ -199,7 +190,7 @@ module openflow-protocol {
                 }\r
             }\r
             grouping echo-request {\r
-                // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Symmetric message */\r
                 uses ofHeader;\r
                 \r
@@ -208,7 +199,7 @@ module openflow-protocol {
                 }\r
             }\r
             grouping echo-reply {\r
-                // reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Symmetric message */\r
                 uses ofHeader;\r
                 \r
@@ -217,28 +208,25 @@ module openflow-protocol {
                 }\r
             }\r
             grouping experimenter {\r
-                // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";\r
                 /* Symmetric message */\r
                 uses ofHeader;\r
                 \r
                 leaf experimenter {\r
-                    type uint32;\r
+                    type oft:experimenter-id;\r
                 }\r
                 leaf exp_type {\r
                     type uint32;\r
                 }\r
-                leaf data {\r
-                    type binary;\r
-                }\r
             }\r
         /* Switch configuration messages. */\r
             grouping features-request {\r
-                // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 uses ofHeader;\r
             }\r
             grouping features-reply {\r
-                // reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 uses ofHeader;\r
                 \r
@@ -268,16 +256,16 @@ module openflow-protocol {
                     type oft:action-type-v10;\r
                 }\r
                 list phy-port {\r
-                    uses port;\r
+                    uses port-grouping;\r
                 }\r
             }\r
             grouping get-config-request {\r
-                // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 uses ofHeader;\r
             }\r
             grouping get-config-reply {\r
-                // reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 uses ofHeader;\r
                 \r
@@ -289,7 +277,7 @@ module openflow-protocol {
                 }\r
             }\r
             grouping set-config {\r
-                // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
@@ -303,7 +291,7 @@ module openflow-protocol {
             }\r
         /* Asynchronous messages. */\r
             grouping packet-in {\r
-                // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec";\r
                 /* Async message */\r
                 \r
                 uses ofHeader;\r
@@ -328,15 +316,8 @@ module openflow-protocol {
                     // Cookie of the flow entry that was looked up.\r
                     type uint64;\r
                 }\r
-                uses match-grouping;\r
-                \r
-// struct ofp_match match; /* Packet metadata. Variable size. */\r
-// /* The variable size and padded match is always followed by:\r
-//  *   - Exactly 2 all-zero padding bytes, then\r
-//  *   - An Ethernet frame whose length is inferred from header.length.\r
-//  * The padding bytes preceding the Ethernet frame ensure that the IP\r
-//  * header (if any) following the Ethernet header is 32-bit aligned.\r
-//  */\r
+                uses oxm:match-grouping;\r
+\r
                 leaf data {\r
                     type binary;\r
                 }\r
@@ -347,7 +328,7 @@ module openflow-protocol {
                 }\r
             }\r
             grouping flow-removed {\r
-                // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec";\r
                 /* Async message */\r
                 uses ofHeader;\r
                 \r
@@ -381,30 +362,30 @@ module openflow-protocol {
                 leaf byte-count {\r
                     type uint64;\r
                 }\r
-                uses match-grouping;\r
+                uses oxm:match-grouping;\r
                 \r
                 // OF1.0 structures\r
                 uses oxm:match-v10-grouping;\r
             } \r
             grouping port-status {\r
-                // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec";\r
                 \r
                 uses ofHeader;\r
                 \r
-                uses port;\r
+                uses port-grouping;\r
                 \r
                 leaf reason {\r
                     type oft:port-reason;\r
                 }\r
-            } /* Async message */\r
+            }\r
         /* Controller command messages. */\r
             grouping packet-out {\r
-                // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
                 \r
-                uses ofaction:actions;\r
+                uses ofaction:actions-grouping;\r
                 \r
                 leaf data {\r
                     type binary;\r
@@ -417,7 +398,7 @@ module openflow-protocol {
                 }\r
             } \r
             grouping flow-mod {\r
-                // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
@@ -455,19 +436,19 @@ module openflow-protocol {
                 leaf flags {\r
                     type oft:flow-mod-flags;\r
                 }\r
-                uses match-grouping;\r
+                uses oxm:match-grouping;\r
                 \r
-                uses ofinstruction:instructions;\r
+                uses ofinstruction:instructions-grouping;\r
                 \r
                 // OF1.0 structures\r
                 leaf flags-v10 {\r
                     type oft:flow-mod-flags-v10;\r
                 }\r
                 uses oxm:match-v10-grouping;\r
-                uses ofaction:actions;\r
+                uses ofaction:actions-grouping;\r
             } \r
             grouping group-mod {\r
-                // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
@@ -482,11 +463,11 @@ module openflow-protocol {
                     type oft:group-id;\r
                 }\r
                 \r
-                uses buckets;\r
+                uses buckets-grouping;\r
             }\r
             \r
             grouping port-mod {\r
-                // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
@@ -518,7 +499,7 @@ module openflow-protocol {
                 }\r
             } \r
             grouping table-mod {\r
-                // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
@@ -533,17 +514,17 @@ module openflow-protocol {
             \r
         /* Multipart messages. */\r
             grouping multipart-request {\r
-                // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
                 \r
                 leaf type {\r
                     type oft:multipart-type;\r
-                }          \r
+                }\r
                 leaf flags {\r
                     type oft:multipart-request-flags;\r
-                }      \r
+                }\r
                 choice multipart-request-body {\r
                     case multipart-request-desc-case {\r
                         container multipart-request-desc {\r
@@ -569,7 +550,7 @@ module openflow-protocol {
                             leaf cookie-mask {\r
                                 type uint64;\r
                             }\r
-                            uses match-grouping;\r
+                            uses oxm:match-grouping;\r
                             \r
                             // OF1.0 structures\r
                             uses oxm:match-v10-grouping;\r
@@ -592,7 +573,7 @@ module openflow-protocol {
                             leaf cookie-mask {\r
                                 type uint64;\r
                             }\r
-                            uses match-grouping;\r
+                            uses oxm:match-grouping;\r
                             \r
                             // OF1.0 structures\r
                             uses oxm:match-v10-grouping;\r
@@ -685,7 +666,7 @@ module openflow-protocol {
                                 leaf max-entries {\r
                                     type uint32;\r
                                 }\r
-                                uses table-features-properties;\r
+                                uses table-features-properties-grouping;\r
                             }\r
                         }\r
                     }\r
@@ -698,21 +679,13 @@ module openflow-protocol {
                     }\r
                     case multipart-request-experimenter-case {\r
                         container multipart-request-experimenter {\r
-                            leaf experimenter {\r
-                                type uint32;\r
-                            }\r
-                            leaf exp-type {\r
-                                type uint32;\r
-                            }\r
-                            leaf data {\r
-                                type binary;\r
-                            }\r
+                            // empty body - used for experimenter augmentation\r
                         }\r
                     }\r
                 }\r
             } \r
             grouping multipart-reply {\r
-                // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
@@ -776,13 +749,13 @@ module openflow-protocol {
                                 leaf byte-count {\r
                                     type uint64;\r
                                 }\r
-                                uses match-grouping;\r
+                                uses oxm:match-grouping;\r
                                 \r
-                                uses ofinstruction:instructions;\r
+                                uses ofinstruction:instructions-grouping;\r
                                 \r
                                 // OF1.0 structures\r
                                 uses oxm:match-v10-grouping;\r
-                                uses ofaction:actions;\r
+                                uses ofaction:actions-grouping;\r
                             }\r
                         }\r
                     }\r
@@ -819,6 +792,18 @@ module openflow-protocol {
                                 leaf name {\r
                                     type string;\r
                                 }\r
+                                leaf wildcards {\r
+                                    type oft:flow-wildcards-v10;\r
+                                }\r
+                                leaf nw-src-mask {\r
+                                    type uint8;\r
+                                }\r
+                                leaf nw-dst-mask {\r
+                                    type uint8;\r
+                                }\r
+                                leaf max-entries {\r
+                                    type uint32;\r
+                                }\r
                             }\r
                         }\r
                     }\r
@@ -941,7 +926,7 @@ module openflow-protocol {
                                 leaf group-id {\r
                                     type oft:group-id;\r
                                 }\r
-                                uses buckets;\r
+                                uses buckets-grouping;\r
                             }\r
                         }\r
                     }\r
@@ -1048,46 +1033,38 @@ module openflow-protocol {
                                 leaf max-entries {\r
                                     type uint32;\r
                                 }\r
-                                uses table-features-properties;\r
+                                uses table-features-properties-grouping;\r
                             }\r
                         }\r
                     }\r
                     case multipart-reply-port-desc-case {\r
                         container multipart-reply-port-desc {\r
                             list ports {\r
-                                uses port;\r
+                                uses port-grouping;\r
                             }\r
                         }\r
                     }\r
                     case multipart-reply-experimenter-case {\r
                         container multipart-reply-experimenter {\r
-                            leaf experimenter {\r
-                                type uint32;\r
-                            }\r
-                            leaf exp-type {\r
-                                type uint32;\r
-                            }\r
-                            leaf data {\r
-                                type binary;\r
-                            }\r
+                            // empty body - used for experimenter augmentation\r
                         }\r
                     }\r
                 }\r
             } \r
             /* Barrier messages. */\r
             grouping barrier-request {\r
-                // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 uses ofHeader;\r
             } \r
             grouping barrier-reply {\r
-                // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 uses ofHeader;\r
             } \r
         /* Queue Configuration messages. */\r
             grouping queue-get-config-request {\r
-                // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
@@ -1097,7 +1074,7 @@ module openflow-protocol {
                 }\r
             } \r
             grouping queue-get-config-reply {\r
-                // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
@@ -1123,7 +1100,7 @@ module openflow-protocol {
             }\r
             grouping queue-property-header {\r
                 list queue-property {\r
-                    key "property";\r
+                    config false;\r
                     leaf property {\r
                         type oft:queue-properties;\r
                     }\r
@@ -1131,7 +1108,7 @@ module openflow-protocol {
             }\r
             /* Controller role change request messages. */\r
             grouping role-request {\r
-                // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
@@ -1144,7 +1121,7 @@ module openflow-protocol {
                 }\r
             } \r
             grouping role-reply {\r
-                // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
@@ -1158,20 +1135,20 @@ module openflow-protocol {
             } \r
             /* Asynchronous message configuration. */\r
             grouping get-async-request {\r
-                // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
-                uses ofHeader;                \r
+                uses ofHeader;\r
             } \r
             grouping get-async-reply {\r
-                // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
                 uses async-body-grouping;\r
             } \r
             grouping set-async {\r
-                // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
                 \r
                 uses ofHeader;\r
@@ -1197,7 +1174,7 @@ module openflow-protocol {
             }\r
             /* Meters and rate limiters configuration messages. */\r
             grouping meter-mod {\r
-                // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec";\r
                 /* Controller/switch message */\r
 \r
                 uses ofHeader;\r
@@ -1216,6 +1193,9 @@ module openflow-protocol {
                 }\r
             }\r
             \r
+            container meter-band-container {\r
+                uses meter-band-header;\r
+            }\r
             grouping meter-band-header {\r
                 choice meter-band {\r
                     case meter-band-drop-case {\r
@@ -1234,9 +1214,6 @@ module openflow-protocol {
                     case meter-band-experimenter-case {\r
                         container meter-band-experimenter {\r
                             uses meter-band-commons;\r
-                            leaf experimenter {\r
-                                type uint32;\r
-                            }\r
                         }\r
                     }\r
                 }\r
@@ -1257,32 +1234,31 @@ module openflow-protocol {
             /* Immutable messages. */\r
             notification hello-message {\r
                 uses hello;\r
-                // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";\r
                 \r
                 /* Symmetric message */\r
             }\r
             notification error-message {\r
                 uses error;\r
-                // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";\r
                 \r
                 /* Symmetric message */\r
             }\r
             notification echo-request-message {\r
                 uses echo-request;\r
-                // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";\r
                 \r
                 /* Symmetric message */\r
             }\r
             notification experimenter-message {\r
                 uses experimenter;\r
-                // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"\r
+                reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";\r
                 // TODO:: does switch send this when understood experimenter msg from lib?\r
                 /* Symmetric message */\r
             }\r
     // # Notification and RPCs\r
         /* Symmetric RPC. */\r
             rpc echo {\r
-                // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses echo-request;\r
                 }\r
@@ -1293,21 +1269,18 @@ module openflow-protocol {
             }\r
             \r
             rpc echo-reply {\r
-                // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses echo-reply;\r
                 }\r
             }\r
             \r
             rpc hello {\r
-                // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses hello;\r
                 }\r
             }\r
             \r
             rpc experimenter {\r
-                // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses experimenter;\r
                 }\r
@@ -1315,7 +1288,6 @@ module openflow-protocol {
 \r
         /* Switch configuration messages. */\r
             rpc get-features {\r
-                // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses features-request;\r
                 }\r
@@ -1326,7 +1298,6 @@ module openflow-protocol {
             }\r
             \r
             rpc get-config {\r
-                // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses get-config-request;\r
                 }\r
@@ -1337,7 +1308,6 @@ module openflow-protocol {
             }\r
             \r
             rpc set-config {\r
-                // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"\r
                 input {\r
                     uses set-config;\r
                 }   \r
@@ -1346,19 +1316,16 @@ module openflow-protocol {
         /* Asynchronous messages. */\r
             notification packet-in-message {\r
                 uses packet-in;\r
-                // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"\r
                 \r
              /* Async message */\r
             }\r
             notification flow-removed-message {\r
                 uses flow-removed;\r
-                // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"\r
                 \r
                 /* Async message */\r
             } \r
             notification port-status-message {\r
                 uses port-status;\r
-                // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"\r
                 \r
             } /* Async message */\r
 \r
@@ -1366,35 +1333,30 @@ module openflow-protocol {
             rpc packet-out {\r
                 input {\r
                     uses packet-out;\r
-                    // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"\r
                 }\r
                 /* Controller/switch message */\r
             } \r
             rpc flow-mod {\r
                 input {\r
                     uses flow-mod;\r
-                    // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"\r
                 }\r
                 /* Controller/switch message */\r
             } \r
             rpc group-mod {\r
                 input {\r
                     uses group-mod;\r
-                    // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"\r
                 }\r
                 /* Controller/switch message */\r
             } \r
             rpc port-mod {\r
                 input {\r
                     uses port-mod;\r
-                    // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"\r
                 }\r
             } /* Controller/switch message */\r
             \r
             rpc table-mod {\r
                 input {\r
                     uses table-mod;\r
-                    // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"\r
                 }\r
             } /* Controller/switch message */\r
 \r
@@ -1409,7 +1371,6 @@ module openflow-protocol {
              /* Controller/switch message */\r
             notification multipart-reply-message {\r
                 uses multipart-reply;\r
-                // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"\r
                 // notification because of multiple following responses\r
             } /* Controller/switch message */\r
             \r
@@ -1418,22 +1379,18 @@ module openflow-protocol {
             rpc barrier {\r
                 input {\r
                     uses barrier-request;\r
-                    // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"\r
                 }\r
                 output {\r
                     uses barrier-reply;\r
-                    // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"\r
                 }\r
             }\r
         /* Queue Configuration messages. */\r
             rpc get-queue-config {\r
                 input {\r
                     uses queue-get-config-request;\r
-                    // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
                 }\r
                 output {\r
                     uses queue-get-config-reply;\r
-                    // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
                 }\r
             } \r
 \r
@@ -1441,11 +1398,9 @@ module openflow-protocol {
             rpc role-request {\r
                 input {\r
                     uses role-request;\r
-                    // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"\r
                 }\r
                 output {\r
                     uses role-reply;\r
-                    // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"\r
                 }\r
             } /* Controller/switch message */\r
             \r
@@ -1453,18 +1408,15 @@ module openflow-protocol {
             rpc get-async {\r
                 input {\r
                     uses get-async-request;\r
-                    // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"\r
                 }\r
                 output {\r
                     uses get-async-reply;\r
-                    // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"\r
                 }\r
             } \r
              /* Controller/switch message */\r
             rpc set-async {\r
                 input { \r
                     uses set-async;\r
-                // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"\r
                 }\r
                 \r
             } \r
@@ -1472,7 +1424,6 @@ module openflow-protocol {
             rpc meter-mod {\r
                 input {\r
                     uses meter-mod;\r
-                    // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"\r
                 }\r
             } /* Controller/switch message */\r
 }
\ No newline at end of file