+module openflow-protocol {
+ namespace "urn:opendaylight:openflow:protocol";
+ prefix "ofproto";
+
+
+ import ietf-inet-types {prefix inet;}
+ import ietf-yang-types {prefix yang;}
+
+ import openflow-types {prefix oft;}
+ import openflow-extensible-match { prefix oxm;}
+ import openflow-instruction { prefix ofinstruction;}
+ import openflow-action {prefix ofaction;}
+
+
+
+ revision "2013-07-31" {
+ description "Initial model";
+ }
+
+ // Generic Structures
+
+ grouping port {
+ reference "ofp_port";
+ leaf port_no {
+ reference "ofp_port.port_no";
+ type uint32;
+ }
+ leaf hw_addr {
+ reference "ofp_port.hw_addr";
+ type yang:mac-address;
+ }
+ leaf name {
+ reference "ofp_port.name";
+ type string;
+ }
+ leaf config {
+ reference "ofp_port.config";
+ type oft:port-config;
+ }
+ leaf state {
+ reference "ofp_port.state";
+ type oft:port-state;
+ }
+ leaf current-features {
+ description "Current features.";
+ reference "ofp_port.curr";
+ type oft:port-features;
+ }
+ leaf advertised-features {
+ description "Features being advertised by the port.";
+ reference "ofp_port.advertised";
+ type oft:port-features;
+ }
+ leaf supported-features {
+ description "Features supported by the port.";
+ reference "ofp_port.supported";
+ type oft:port-features;
+ }
+ leaf peer-features {
+ description "Features advertised by peer.";
+ reference "ofp_port.peer";
+ type oft:port-features;
+ }
+ leaf curr_speed {
+ description "Current port bitrate in kbps.";
+ reference "ofp_port.curr_speed";
+ type uint32;
+ units "kbps";
+ }
+ leaf max_speed {
+ description "Max port bitrate in kbps";
+ reference "ofp_port.max_speed";
+ type uint32;
+ units "kbps";
+ }
+ }
+
+ // TODO: ofp_packat_queue
+
+ // # MESSAGE Structures
+ /* Immutable messages. */
+ grouping hello {
+ reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ grouping error {
+ reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ grouping echo_request {
+ reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ grouping echo_reply {
+ reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ grouping experimenter {
+ reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ /* Switch configuration messages. */
+ grouping features_request {
+ reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping features_reply {
+ reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping get_config_request {
+ reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping get_config_reply {
+ reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping set_config {
+ reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ /* Asynchronous messages. */
+ grouping packet_in {
+ reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
+
+ /* Async message */
+ }
+ grouping flow_removed {
+ reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
+
+ /* Async message */
+ }
+ grouping port_status {
+ reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
+
+ } /* Async message */
+ /* Controller command messages. */
+ grouping packet_out {
+ reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping flow_mod {
+ reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping group_mod {
+ reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
+
+ /* Controller/switch message */
+ }
+ grouping port_mod {
+ reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping table_mod {
+ reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Multipart messages. */
+ grouping multipart_request {
+ reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping multipart_reply {
+ reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Barrier messages. */
+ grouping barrier_request {
+ reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping barrier_reply {
+ reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Queue Configuration messages. */
+ grouping queue_get_config_request {
+ reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping queue_get_config_reply {
+ reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Controller role change request messages. */
+ grouping role_request {
+ reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping role_reply {
+ reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Asynchronous message configuration. */
+ grouping get_async_request {
+ reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping get_async_reply {
+ reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ grouping set_async {
+ reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Meters and rate limiters configuration messages. */
+ grouping meter_mod {
+ reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+
+
+
+ /* Immutable messages. */
+ notification hello {
+ uses hello;
+ reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ notification error {
+ uses error;
+ reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ notification echo_request {
+ uses echo_request;
+ reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ notification echo_reply {
+ uses echo_reply;
+ reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ notification experimenter {
+ uses experimenter;
+ reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
+
+ /* Symmetric message */
+ }
+ /* Switch configuration messages. */
+ rpc get_features {
+ input {
+ uses features_request;
+ reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
+ }
+ output {
+ uses features_reply;
+ reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
+ }
+ }
+
+
+ notification get_config {
+ input {
+ uses get_config_request;
+ reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
+ }
+ output {
+ uses get_config_reply;
+ reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
+ }
+ }
+
+ notification set_config {
+ input {
+ uses set_config;
+ reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
+ }
+ /* Controller/switch message */
+ }
+
+ // # Notification and RPCs
+
+
+ /* Switch configuration messages. */
+ rpc get_features {
+ reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
+ input {
+ uses features_request;
+ }
+ /* Controller/switch message */
+ output {
+ uses features_reply;
+ }
+ }
+
+ rpc get_config {
+ reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
+ input {
+ uses get_config_request;
+ }
+ output {
+ uses get_config_reply;
+ }
+ /* Controller/switch message */
+ }
+
+ grouping set_config {
+ reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
+ input {
+ uses set_config;
+ }
+ /* Controller/switch message */
+ }
+ /* Asynchronous messages. */
+ notification packet_in {
+ uses packet_in;
+ reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
+
+ /* Async message */
+ }
+ notification flow_removed {
+ uses flow_removed;
+ reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
+
+ /* Async message */
+ }
+ notification port_status {
+ uses port_status;
+ reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
+
+ } /* Async message */
+
+ /* Controller command messages. */
+ rpc packet_out {
+ input {
+ uses packet_out;
+ reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
+ }
+ /* Controller/switch message */
+ }
+ rpc flow_mod {
+ input {
+ uses flow_mod;
+ reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
+ }
+ /* Controller/switch message */
+ }
+ rpc group_mod {
+ input {
+ uses group_mod;
+ reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
+ }
+ /* Controller/switch message */
+ }
+ rpc port_mod {
+ input {
+ uses port_mod;
+ reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
+ }
+ } /* Controller/switch message */
+
+ rpc table_mod {
+ input {
+ uses table_mod;
+ reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
+ }
+ } /* Controller/switch message */
+
+ /* Multipart messages. */
+ //FIXME: Arent this wire protocol specific?
+
+ notification multipart_request {
+ uses multipart_request;
+ reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ notification multipart_reply {
+ uses multipart_reply;
+ reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+
+
+ /* Barrier messages. */
+ rpc barrier {
+ input {
+ uses barrier_request;
+ reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
+ }
+ output {
+ uses barrier_reply;
+ reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
+ }
+ }
+ /* Queue Configuration messages. */
+ rpc get_queue_config {
+ input {
+ uses queue_get_config_request;
+ reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
+ }
+ output {
+ uses queue_get_config_reply;
+ reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
+ }
+ }
+
+ /* Controller role change request messages. */
+ rpc role_request {
+ input {
+ uses role_request;
+ reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
+ }
+ output {
+ uses role_reply;
+ reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
+ }
+ } /* Controller/switch message */
+
+ /* Asynchronous message configuration. */
+ notification get_async_request {
+ uses get_async_request;
+ reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ notification get_async_reply {
+ uses get_async_reply;
+ reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ notification set_async {
+ uses set_async;
+ reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
+
+ } /* Controller/switch message */
+ /* Meters and rate limiters configuration messages. */
+ rpc meter_mod {
+ input {
+ uses meter_mod;
+ reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
+ }
+ } /* Controller/switch message */
+}
\ No newline at end of file