X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=openflowjava.git;a=blobdiff_plain;f=openflow-protocol-api%2Fsrc%2Fmain%2Fyang%2Fopenflow-protocol.yang;fp=openflow-protocol-api%2Fsrc%2Fmain%2Fyang%2Fopenflow-protocol.yang;h=9330fac6fd5fbdd4f9f0305d7cbc8e5b33ca78a3;hp=32070d14cf900c973825c3fe47985df02d7e7e3a;hb=519a86d1ddcfb8f0fe264174e62e5424e1efba1f;hpb=9a0a2899b730e740cdaae425f7d5dd7027dfa1d1 diff --git a/openflow-protocol-api/src/main/yang/openflow-protocol.yang b/openflow-protocol-api/src/main/yang/openflow-protocol.yang index 32070d14..9330fac6 100644 --- a/openflow-protocol-api/src/main/yang/openflow-protocol.yang +++ b/openflow-protocol-api/src/main/yang/openflow-protocol.yang @@ -1,1429 +1,1429 @@ -/* - * 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-protocol { - namespace "urn:opendaylight:openflow:protocol"; - prefix "ofproto"; - - 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 "OpenFlow 1.3 - protocol objects model"; - } - - // Generic Structures - grouping port-grouping { - reference "ofp_port"; - leaf port-no { - type uint32; - } - leaf hw-addr { - type yang:mac-address; - } - leaf name { - type string; - } - leaf config { - description "Bitmap of OFPPC_* flags."; - type oft:port-config; - } - leaf state { - description "Bitmap of OFPPS_* flags."; - type oft:port-state; - } - leaf current-features { - description "Current features."; - type oft:port-features; - } - leaf advertised-features { - description "Features being advertised by the port."; - type oft:port-features; - } - leaf supported-features { - description "Features supported by the port."; - type oft:port-features; - } - leaf peer-features { - description "Features advertised by peer."; - type oft:port-features; - } - leaf curr-speed { - description "Current port bitrate in kbps."; - type uint32; - units "kbps"; - } - leaf max-speed { - description "Max port bitrate in kbps"; - type uint32; - units "kbps"; - } - - // OF1.0 structures - leaf config-v10 { - type oft:port-config-v10; - } - leaf state-v10 { - type oft:port-state-v10; - } - leaf current-features-v10 { - description "Current features."; - type oft:port-features-v10; - } - leaf advertised-features-v10 { - description "Features being advertised by the port."; - type oft:port-features-v10; - } - leaf supported-features-v10 { - description "Features supported by the port."; - type oft:port-features-v10; - } - leaf peer-features-v10 { - description "Features advertised by peer."; - type oft:port-features-v10; - } - } - - grouping buckets-grouping { - list buckets-list { - uses bucket-grouping; - } - } - - grouping bucket-grouping { - description "Bucket for use in groups."; - leaf weight { - description "Relative weight of bucket. Only - defined for select groups."; - type uint16; - } - leaf watch-port { - description "Port whose state affects whether this - bucket is live. Only required for fast - failover groups."; - type oft:port-number; - } - leaf watch-group { - description "Group whose state affects whether this - bucket is live. Only required for fast - failover groups."; - type uint32; - } - - uses ofaction:actions-grouping; - } - - container table-features-properties-container { - uses table-features-properties-grouping; - } - - grouping table-features-properties-grouping { - list table-feature-properties { - config false; - leaf type { - type oft:table-features-prop-type; - } - } - } - - // # MESSAGE Structures - /* Immutable messages. */ - grouping ofHeader { - reference "ofp_header struct in Openflow Switch 1.3 Spec"; - leaf version { - type uint8; - description "OpenFlow version"; - } - leaf xid { - type uint32; - description "Transaction ID"; - } - } - grouping ofHelloElementHeader { - reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"; - leaf type { - type oft:hello-element-type; - //reference "OpenFlow Header element type - OFPHET_*"; - } - } - grouping hello { - reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"; - /* Symmetric message */ - uses ofHeader; - - list elements { - uses ofHelloElementHeader; - - leaf-list version-bitmap { - type boolean; - } - } - } - grouping error { - reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"; - /* Symmetric message */ - uses ofHeader; - - leaf type { - type uint16; - } - leaf code { - type uint16; - } - leaf type-string { - type string; - } - leaf code-string { - type string; - } - leaf data { - type binary; - } - } - grouping echo-request { - reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"; - /* Symmetric message */ - uses ofHeader; - - leaf data { - type binary; - } - } - grouping echo-reply { - reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"; - /* Symmetric message */ - uses ofHeader; - - leaf data { - type binary; - } - } - grouping experimenter { - reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"; - /* Symmetric message */ - uses ofHeader; - - leaf experimenter { - type oft:experimenter-id; - } - leaf exp_type { - type uint32; - } - } - /* Switch configuration messages. */ - grouping features-request { - reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - uses ofHeader; - } - grouping features-reply { - reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - uses ofHeader; - - leaf datapathId { - type uint64; - } - leaf buffers { - type uint32; - } - leaf tables { - type uint8; - } - leaf auxiliaryId { - type uint8; - } - leaf capabilities { - type oft:capabilities; - } - leaf reserved { - type uint32; - } - // OF1.0 structures - leaf capabilities-v10 { - type oft:capabilities-v10; - } - leaf actions-v10 { - type oft:action-type-v10; - } - list phy-port { - uses port-grouping; - } - } - grouping get-config-request { - reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - uses ofHeader; - } - grouping get-config-reply { - reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - uses ofHeader; - - leaf flags { - type oft:switch-config-flag; - } - leaf miss-send-len { - type uint16; - } - } - grouping set-config { - reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf flags { - type oft:switch-config-flag; - } - leaf miss-send-len { - type uint16; - } - } - /* Asynchronous messages. */ - grouping packet-in { - reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"; - /* Async message */ - - uses ofHeader; - - leaf buffer-id { - // ID assigned by datapath. - type uint32; - } - leaf total-len { - // Full length of frame. - type uint16; - } - leaf reason { - // Reason packet is being sent (one of OFPR_*) - type oft:packet-in-reason; - } - leaf table-id { - // ID of the table that was looked up - type oft:table-id; - } - leaf cookie { - // Cookie of the flow entry that was looked up. - type uint64; - } - uses oxm:match-grouping; - - leaf data { - type binary; - } - - // OF1.0 structures - leaf in-port { - type uint16; - } - } - grouping flow-removed { - reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"; - /* Async message */ - uses ofHeader; - - leaf cookie { - type uint64; - } - leaf priority { - type uint16; - } - leaf reason { - type oft:flow-removed-reason; - } - leaf table-id { - type oft:table-id; - } - leaf duration-sec { - type uint32; - } - leaf duration-nsec { - type uint32; - } - leaf idle-timeout { - type uint16; - } - leaf hard-timeout { - type uint16; - } - leaf packet-count { - type uint64; - } - leaf byte-count { - type uint64; - } - uses oxm:match-grouping; - - // OF1.0 structures - uses oxm:match-v10-grouping; - } - grouping port-status { - reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"; - - uses ofHeader; - - uses port-grouping; - - leaf reason { - type oft:port-reason; - } - } - /* Controller command messages. */ - grouping packet-out { - reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - uses ofaction:actions-grouping; - - leaf data { - type binary; - } - leaf buffer-id { - type uint32; - } - leaf in-port { - type oft:port-number; - } - } - grouping flow-mod { - reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf cookie { - type uint64; - } - leaf cookie-mask { - type uint64; - } - leaf table-id { - type oft:table-id; - } - leaf command { - type oft:flow-mod-command; - } - leaf idle-timeout { - type uint16; - } - leaf hard-timeout { - type uint16; - } - leaf priority { - type uint16; - } - leaf buffer-id { - type uint32; - } - leaf out-port { - type oft:port-number; - } - leaf out-group { - type uint32; - } - leaf flags { - type oft:flow-mod-flags; - } - uses oxm:match-grouping; - - uses ofinstruction:instructions-grouping; - - // OF1.0 structures - leaf flags-v10 { - type oft:flow-mod-flags-v10; - } - uses oxm:match-v10-grouping; - uses ofaction:actions-grouping; - } - grouping group-mod { - reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf command { - type oft:group-mod-command; - } - leaf type { - type oft:group-type; - } - leaf group-id { - type oft:group-id; - } - - uses buckets-grouping; - } - - grouping port-mod { - reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf port-no { - type oft:port-number; - } - leaf hw-address { - type yang:mac-address; - } - leaf config { - type oft:port-config; - } - leaf mask { - type oft:port-config; - } - leaf advertise { - type oft:port-features; - } - // OF1.0 structures - leaf config-v10 { - type oft:port-config-v10; - } - leaf mask-v10 { - type oft:port-config-v10; - } - leaf advertise-v10 { - type oft:port-features-v10; - } - } - grouping table-mod { - reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf table-id { - type oft:table-id; - } - leaf config { - type oft:table-config; - } - } - - /* Multipart messages. */ - grouping multipart-request { - reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf type { - type oft:multipart-type; - } - leaf flags { - type oft:multipart-request-flags; - } - choice multipart-request-body { - case multipart-request-desc-case { - container multipart-request-desc { - leaf empty { - type empty; - } - } - } - case multipart-request-flow-case { - container multipart-request-flow { - leaf table-id { - type uint8; - } - leaf out-port { - type uint32; - } - leaf out-group { - type uint32; - } - leaf cookie { - type uint64; - } - leaf cookie-mask { - type uint64; - } - uses oxm:match-grouping; - - // OF1.0 structures - uses oxm:match-v10-grouping; - } - } - case multipart-request-aggregate-case { - container multipart-request-aggregate { - leaf table-id { - type uint8; - } - leaf out-port { - type uint32; - } - leaf out-group { - type uint32; - } - leaf cookie { - type uint64; - } - leaf cookie-mask { - type uint64; - } - uses oxm:match-grouping; - - // OF1.0 structures - uses oxm:match-v10-grouping; - } - } - case multipart-request-table-case { - container multipart-request-table { - leaf empty { - type empty; - } - } - } - case multipart-request-port-stats-case { - container multipart-request-port-stats { - leaf port-no { - type uint32; - } - } - } - case multipart-request-queue-case { - container multipart-request-queue { - leaf port-no { - type uint32; - } - leaf queue-id { - type uint32; - } - } - } - case multipart-request-group-case { - container multipart-request-group { - leaf group-id { - type oft:group-id; - } - } - } - case multipart-request-group-desc-case { - container multipart-request-group-desc { - leaf empty { - type empty; - } - } - } - case multipart-request-group-features-case { - container multipart-request-group-features { - leaf empty { - type empty; - } - } - } - case multipart-request-meter-case { - container multipart-request-meter { - leaf meter-id { - type oft:meter-id; - } - } - } - case multipart-request-meter-config-case { - container multipart-request-meter-config { - leaf meter-id { - type oft:meter-id; - } - } - } - case multipart-request-meter-features-case { - container multipart-request-meter-features { - leaf empty { - type empty; - } - } - } - case multipart-request-table-features-case { - container multipart-request-table-features { - list table-features { - leaf table-id { - type uint8; - } - leaf name { - type string; - } - leaf metadata-match { - type uint64; - } - leaf metadata-write { - type uint64; - } - leaf config { - type oft:table-config; - } - leaf max-entries { - type uint32; - } - uses table-features-properties-grouping; - } - } - } - case multipart-request-port-desc-case { - container multipart-request-port-desc { - leaf empty { - type empty; - } - } - } - case multipart-request-experimenter-case { - container multipart-request-experimenter { - // empty body - used for experimenter augmentation - } - } - } - } - grouping multipart-reply { - reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf type { - type oft:multipart-type; - } - leaf flags { - type oft:multipart-request-flags; - } - choice multipart-reply-body { - case multipart-reply-desc-case { - container multipart-reply-desc { - leaf mfr_desc { - type string; - } - leaf hw_desc { - type string; - } - leaf sw_desc { - type string; - } - leaf serial_num { - type string; - } - leaf dp_desc { - type string; - } - } - } - case multipart-reply-flow-case { - container multipart-reply-flow { - list flow-stats { - leaf table-id { - type uint8; - } - leaf duration-sec { - type uint32; - } - leaf duration-nsec { - type uint32; - } - leaf priority { - type uint16; - } - leaf idle-timeout { - type uint16; - } - leaf hard-timeout { - type uint16; - } - leaf flags { - type oft:flow-mod-flags; - } - leaf cookie { - type uint64; - } - leaf packet-count { - type uint64; - } - leaf byte-count { - type uint64; - } - uses oxm:match-grouping; - - uses ofinstruction:instructions-grouping; - - // OF1.0 structures - uses oxm:match-v10-grouping; - uses ofaction:actions-grouping; - } - } - } - case multipart-reply-aggregate-case { - container multipart-reply-aggregate { - leaf packet-count { - type uint64; - } - leaf byte-count { - type uint64; - } - leaf flow-count { - type uint32; - } - } - } - case multipart-reply-table-case { - container multipart-reply-table { - list table-stats { - leaf table-id { - type uint8; - } - leaf active-count { - type uint32; - } - leaf lookup-count { - type uint64; - } - leaf matched-count { - type uint64; - } - - // OF1.0 structures - leaf name { - type string; - } - leaf wildcards { - type oft:flow-wildcards-v10; - } - leaf nw-src-mask { - type uint8; - } - leaf nw-dst-mask { - type uint8; - } - leaf max-entries { - type uint32; - } - } - } - } - case multipart-reply-port-stats-case { - container multipart-reply-port-stats { - list port-stats { - leaf port-no { - type uint32; - } - leaf rx-packets { - type uint64; - } - leaf tx-packets { - type uint64; - } - leaf rx-bytes { - type uint64; - } - leaf tx-bytes { - type uint64; - } - leaf rx-dropped { - type uint64; - } - leaf tx-dropped { - type uint64; - } - leaf rx-errors { - type uint64; - } - leaf tx-errors { - type uint64; - } - leaf rx-frame-err { - type uint64; - } - leaf rx-over-err { - type uint64; - } - leaf rx-crc-err { - type uint64; - } - leaf collisions { - type uint64; - } - leaf duration-sec { - type uint32; - } - leaf duration-nsec { - type uint32; - } - } - } - } - case multipart-reply-queue-case { - container multipart-reply-queue { - list queue-stats { - leaf port-no { - type uint32; - } - leaf queue-id { - type uint32; - } - leaf tx-bytes { - type uint64; - } - leaf tx-packets { - type uint64; - } - leaf tx-errors { - type uint64; - } - leaf duration-sec { - type uint32; - } - leaf duration-nsec { - type uint32; - } - } - } - } - case multipart-reply-group-case { - container multipart-reply-group { - list group-stats { - leaf group-id { - type oft:group-id; - } - leaf ref-count { - type uint32; - } - leaf packet-count { - type uint64; - } - leaf byte-count { - type uint64; - } - leaf duration-sec { - type uint32; - } - leaf duration-nsec { - type uint32; - } - list bucket-stats { - leaf packet-count { - type uint64; - } - leaf byte-count { - type uint64; - } - } - } - } - } - case multipart-reply-group-desc-case { - container multipart-reply-group-desc { - list group-desc { - leaf type { - type oft:group-type; - } - leaf group-id { - type oft:group-id; - } - uses buckets-grouping; - } - } - } - case multipart-reply-group-features-case { - container multipart-reply-group-features { - leaf types { - type oft:group-types; - } - leaf capabilities { - type oft:group-capabilities; - } - leaf-list max_groups { - type uint32; - } - leaf-list actions-bitmap { - type oft:action-type; - } - } - } - case multipart-reply-meter-case { - container multipart-reply-meter { - list meter-stats { - leaf meter-id { - type oft:meter-id; - } - leaf flow-count { - type uint32; - } - leaf packet-in-count { - type uint64; - } - leaf byte-in-count { - type uint64; - } - leaf duration-sec { - type uint32; - } - leaf duration-nsec { - type uint32; - } - list meter-band-stats { - leaf packet-band-count { - type uint64; - } - leaf byte-band-count { - type uint64; - } - } - } - } - } - case multipart-reply-meter-config-case { - container multipart-reply-meter-config { - list meter-config { - leaf flags { - type oft:meter-flags; - } - leaf meter-id { - type oft:meter-id; - } - list bands { - uses meter-band-header; - } - } - } - } - case multipart-reply-meter-features-case { - container multipart-reply-meter-features { - leaf max-meter { - type uint32; - } - leaf band-types { - type oft:meter-band-type-bitmap; - } - leaf capabilities { - type oft:meter-flags; - } - leaf max-bands { - type uint8; - } - leaf max-color { - type uint8; - } - } - } - case multipart-reply-table-features-case { - container multipart-reply-table-features { - list table-features { - leaf table-id { - type uint8; - } - leaf name { - type string; - } - leaf metadata-match { - type binary; - } - leaf metadata-write { - type binary; - } - leaf config { - type oft:table-config; - } - leaf max-entries { - type uint32; - } - uses table-features-properties-grouping; - } - } - } - case multipart-reply-port-desc-case { - container multipart-reply-port-desc { - list ports { - uses port-grouping; - } - } - } - case multipart-reply-experimenter-case { - container multipart-reply-experimenter { - // empty body - used for experimenter augmentation - } - } - } - } - /* Barrier messages. */ - grouping barrier-request { - reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - uses ofHeader; - } - grouping barrier-reply { - reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - uses ofHeader; - } - /* Queue Configuration messages. */ - grouping queue-get-config-request { - reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf port { - type oft:port-number; - } - } - grouping queue-get-config-reply { - reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf port { - type oft:port-number; - } - list queues { - uses packet-queue; - } - } - grouping packet-queue { - leaf queue-id { - type oft:queue-id; - } - leaf port { - type oft:port-number; - } - uses queue-property-header; - } - container queue-prop-container { - uses queue-property-header; - } - grouping queue-property-header { - list queue-property { - config false; - leaf property { - type oft:queue-properties; - } - } - } - /* Controller role change request messages. */ - grouping role-request { - reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf role { - type oft:controller-role; - } - leaf generation-id { - type uint64; - } - } - grouping role-reply { - reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf role { - type oft:controller-role; - } - leaf generation-id { - type uint64; - } - } - /* Asynchronous message configuration. */ - grouping get-async-request { - reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - } - grouping get-async-reply { - reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - uses async-body-grouping; - } - grouping set-async { - reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - uses async-body-grouping; - } - - grouping async-body-grouping { - list packet-in-mask { - leaf-list mask { - type oft:packet-in-reason; - } - } - list port-status-mask { - leaf-list mask { - type oft:port-reason; - } - } - list flow-removed-mask { - leaf-list mask { - type oft:flow-removed-reason; - } - } - } - /* Meters and rate limiters configuration messages. */ - grouping meter-mod { - reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"; - /* Controller/switch message */ - - uses ofHeader; - - leaf command { - type oft:meter-mod-command; - } - leaf flags { - type oft:meter-flags; - } - leaf meter-id { - type oft:meter-id; - } - list bands { - uses meter-band-header; - } - } - - container meter-band-container { - uses meter-band-header; - } - grouping meter-band-header { - choice meter-band { - case meter-band-drop-case { - container meter-band-drop { - uses meter-band-commons; - } - } - case meter-band-dscp-remark-case { - container meter-band-dscp-remark { - uses meter-band-commons; - leaf prec-level { - type uint8; - } - } - } - case meter-band-experimenter-case { - container meter-band-experimenter { - uses meter-band-commons; - } - } - } - } - - grouping meter-band-commons { - leaf type { - type oft:meter-band-type; - } - leaf rate { - type uint32; - } - leaf burst-size { - type uint32; - } - } - - /* Immutable messages. */ - notification hello-message { - uses hello; - reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"; - - /* Symmetric message */ - } - notification error-message { - uses error; - reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"; - - /* Symmetric message */ - } - notification echo-request-message { - uses echo-request; - reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"; - - /* Symmetric message */ - } - notification experimenter-message { - uses experimenter; - reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"; - // TODO:: does switch send this when understood experimenter msg from lib? - /* Symmetric message */ - } - // # Notification and RPCs - /* Symmetric RPC. */ - rpc echo { - input { - uses echo-request; - } - /* Controller/switch message */ - output { - uses echo-reply; - } - } - - rpc echo-reply { - input { - uses echo-reply; - } - } - - rpc hello { - input { - uses hello; - } - } - - rpc experimenter { - input { - uses experimenter; - } - } - - /* Switch configuration messages. */ - rpc get-features { - input { - uses features-request; - } - /* Controller/switch message */ - output { - uses features-reply; - } - } - - rpc get-config { - input { - uses get-config-request; - } - output { - uses get-config-reply; - } - /* Controller/switch message */ - } - - rpc set-config { - input { - uses set-config; - } - /* Controller/switch message */ - } - /* Asynchronous messages. */ - notification packet-in-message { - uses packet-in; - - /* Async message */ - } - notification flow-removed-message { - uses flow-removed; - - /* Async message */ - } - notification port-status-message { - uses port-status; - - } /* Async message */ - - /* Controller command messages. */ - rpc packet-out { - input { - uses packet-out; - } - /* Controller/switch message */ - } - rpc flow-mod { - input { - uses flow-mod; - } - /* Controller/switch message */ - } - rpc group-mod { - input { - uses group-mod; - } - /* Controller/switch message */ - } - rpc port-mod { - input { - uses port-mod; - } - } /* Controller/switch message */ - - rpc table-mod { - input { - uses table-mod; - } - } /* Controller/switch message */ - - /* Multipart messages. */ - - rpc multipart-request { - input { - uses multipart-request; - } - } - - /* Controller/switch message */ - notification multipart-reply-message { - uses multipart-reply; - // notification because of multiple following responses - } /* Controller/switch message */ - - - /* Barrier messages. */ - rpc barrier { - input { - uses barrier-request; - } - output { - uses barrier-reply; - } - } - /* Queue Configuration messages. */ - rpc get-queue-config { - input { - uses queue-get-config-request; - } - output { - uses queue-get-config-reply; - } - } - - /* Controller role change request messages. */ - rpc role-request { - input { - uses role-request; - } - output { - uses role-reply; - } - } /* Controller/switch message */ - - /* Asynchronous message configuration. */ - rpc get-async { - input { - uses get-async-request; - } - output { - uses get-async-reply; - } - } - /* Controller/switch message */ - rpc set-async { - input { - uses set-async; - } - - } - /* Meters and rate limiters configuration messages. */ - rpc meter-mod { - input { - uses meter-mod; - } - } /* Controller/switch message */ +/* + * 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-protocol { + namespace "urn:opendaylight:openflow:protocol"; + prefix "ofproto"; + + 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 "OpenFlow 1.3 - protocol objects model"; + } + + // Generic Structures + grouping port-grouping { + reference "ofp_port"; + leaf port-no { + type uint32; + } + leaf hw-addr { + type yang:mac-address; + } + leaf name { + type string; + } + leaf config { + description "Bitmap of OFPPC_* flags."; + type oft:port-config; + } + leaf state { + description "Bitmap of OFPPS_* flags."; + type oft:port-state; + } + leaf current-features { + description "Current features."; + type oft:port-features; + } + leaf advertised-features { + description "Features being advertised by the port."; + type oft:port-features; + } + leaf supported-features { + description "Features supported by the port."; + type oft:port-features; + } + leaf peer-features { + description "Features advertised by peer."; + type oft:port-features; + } + leaf curr-speed { + description "Current port bitrate in kbps."; + type uint32; + units "kbps"; + } + leaf max-speed { + description "Max port bitrate in kbps"; + type uint32; + units "kbps"; + } + + // OF1.0 structures + leaf config-v10 { + type oft:port-config-v10; + } + leaf state-v10 { + type oft:port-state-v10; + } + leaf current-features-v10 { + description "Current features."; + type oft:port-features-v10; + } + leaf advertised-features-v10 { + description "Features being advertised by the port."; + type oft:port-features-v10; + } + leaf supported-features-v10 { + description "Features supported by the port."; + type oft:port-features-v10; + } + leaf peer-features-v10 { + description "Features advertised by peer."; + type oft:port-features-v10; + } + } + + grouping buckets-grouping { + list buckets-list { + uses bucket-grouping; + } + } + + grouping bucket-grouping { + description "Bucket for use in groups."; + leaf weight { + description "Relative weight of bucket. Only + defined for select groups."; + type uint16; + } + leaf watch-port { + description "Port whose state affects whether this + bucket is live. Only required for fast + failover groups."; + type oft:port-number; + } + leaf watch-group { + description "Group whose state affects whether this + bucket is live. Only required for fast + failover groups."; + type uint32; + } + + uses ofaction:actions-grouping; + } + + container table-features-properties-container { + uses table-features-properties-grouping; + } + + grouping table-features-properties-grouping { + list table-feature-properties { + config false; + leaf type { + type oft:table-features-prop-type; + } + } + } + + // # MESSAGE Structures + /* Immutable messages. */ + grouping ofHeader { + reference "ofp_header struct in Openflow Switch 1.3 Spec"; + leaf version { + type uint8; + description "OpenFlow version"; + } + leaf xid { + type uint32; + description "Transaction ID"; + } + } + grouping ofHelloElementHeader { + reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"; + leaf type { + type oft:hello-element-type; + //reference "OpenFlow Header element type - OFPHET_*"; + } + } + grouping hello { + reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"; + /* Symmetric message */ + uses ofHeader; + + list elements { + uses ofHelloElementHeader; + + leaf-list version-bitmap { + type boolean; + } + } + } + grouping error { + reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"; + /* Symmetric message */ + uses ofHeader; + + leaf type { + type uint16; + } + leaf code { + type uint16; + } + leaf type-string { + type string; + } + leaf code-string { + type string; + } + leaf data { + type binary; + } + } + grouping echo-request { + reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"; + /* Symmetric message */ + uses ofHeader; + + leaf data { + type binary; + } + } + grouping echo-reply { + reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"; + /* Symmetric message */ + uses ofHeader; + + leaf data { + type binary; + } + } + grouping experimenter { + reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"; + /* Symmetric message */ + uses ofHeader; + + leaf experimenter { + type oft:experimenter-id; + } + leaf exp_type { + type uint32; + } + } + /* Switch configuration messages. */ + grouping features-request { + reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + uses ofHeader; + } + grouping features-reply { + reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + uses ofHeader; + + leaf datapathId { + type uint64; + } + leaf buffers { + type uint32; + } + leaf tables { + type uint8; + } + leaf auxiliaryId { + type uint8; + } + leaf capabilities { + type oft:capabilities; + } + leaf reserved { + type uint32; + } + // OF1.0 structures + leaf capabilities-v10 { + type oft:capabilities-v10; + } + leaf actions-v10 { + type oft:action-type-v10; + } + list phy-port { + uses port-grouping; + } + } + grouping get-config-request { + reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + uses ofHeader; + } + grouping get-config-reply { + reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + uses ofHeader; + + leaf flags { + type oft:switch-config-flag; + } + leaf miss-send-len { + type uint16; + } + } + grouping set-config { + reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf flags { + type oft:switch-config-flag; + } + leaf miss-send-len { + type uint16; + } + } + /* Asynchronous messages. */ + grouping packet-in { + reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"; + /* Async message */ + + uses ofHeader; + + leaf buffer-id { + // ID assigned by datapath. + type uint32; + } + leaf total-len { + // Full length of frame. + type uint16; + } + leaf reason { + // Reason packet is being sent (one of OFPR_*) + type oft:packet-in-reason; + } + leaf table-id { + // ID of the table that was looked up + type oft:table-id; + } + leaf cookie { + // Cookie of the flow entry that was looked up. + type uint64; + } + uses oxm:match-grouping; + + leaf data { + type binary; + } + + // OF1.0 structures + leaf in-port { + type uint16; + } + } + grouping flow-removed { + reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"; + /* Async message */ + uses ofHeader; + + leaf cookie { + type uint64; + } + leaf priority { + type uint16; + } + leaf reason { + type oft:flow-removed-reason; + } + leaf table-id { + type oft:table-id; + } + leaf duration-sec { + type uint32; + } + leaf duration-nsec { + type uint32; + } + leaf idle-timeout { + type uint16; + } + leaf hard-timeout { + type uint16; + } + leaf packet-count { + type uint64; + } + leaf byte-count { + type uint64; + } + uses oxm:match-grouping; + + // OF1.0 structures + uses oxm:match-v10-grouping; + } + grouping port-status { + reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"; + + uses ofHeader; + + uses port-grouping; + + leaf reason { + type oft:port-reason; + } + } + /* Controller command messages. */ + grouping packet-out { + reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + uses ofaction:actions-grouping; + + leaf data { + type binary; + } + leaf buffer-id { + type uint32; + } + leaf in-port { + type oft:port-number; + } + } + grouping flow-mod { + reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf cookie { + type uint64; + } + leaf cookie-mask { + type uint64; + } + leaf table-id { + type oft:table-id; + } + leaf command { + type oft:flow-mod-command; + } + leaf idle-timeout { + type uint16; + } + leaf hard-timeout { + type uint16; + } + leaf priority { + type uint16; + } + leaf buffer-id { + type uint32; + } + leaf out-port { + type oft:port-number; + } + leaf out-group { + type uint32; + } + leaf flags { + type oft:flow-mod-flags; + } + uses oxm:match-grouping; + + uses ofinstruction:instructions-grouping; + + // OF1.0 structures + leaf flags-v10 { + type oft:flow-mod-flags-v10; + } + uses oxm:match-v10-grouping; + uses ofaction:actions-grouping; + } + grouping group-mod { + reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf command { + type oft:group-mod-command; + } + leaf type { + type oft:group-type; + } + leaf group-id { + type oft:group-id; + } + + uses buckets-grouping; + } + + grouping port-mod { + reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf port-no { + type oft:port-number; + } + leaf hw-address { + type yang:mac-address; + } + leaf config { + type oft:port-config; + } + leaf mask { + type oft:port-config; + } + leaf advertise { + type oft:port-features; + } + // OF1.0 structures + leaf config-v10 { + type oft:port-config-v10; + } + leaf mask-v10 { + type oft:port-config-v10; + } + leaf advertise-v10 { + type oft:port-features-v10; + } + } + grouping table-mod { + reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf table-id { + type oft:table-id; + } + leaf config { + type oft:table-config; + } + } + + /* Multipart messages. */ + grouping multipart-request { + reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf type { + type oft:multipart-type; + } + leaf flags { + type oft:multipart-request-flags; + } + choice multipart-request-body { + case multipart-request-desc-case { + container multipart-request-desc { + leaf empty { + type empty; + } + } + } + case multipart-request-flow-case { + container multipart-request-flow { + leaf table-id { + type uint8; + } + leaf out-port { + type uint32; + } + leaf out-group { + type uint32; + } + leaf cookie { + type uint64; + } + leaf cookie-mask { + type uint64; + } + uses oxm:match-grouping; + + // OF1.0 structures + uses oxm:match-v10-grouping; + } + } + case multipart-request-aggregate-case { + container multipart-request-aggregate { + leaf table-id { + type uint8; + } + leaf out-port { + type uint32; + } + leaf out-group { + type uint32; + } + leaf cookie { + type uint64; + } + leaf cookie-mask { + type uint64; + } + uses oxm:match-grouping; + + // OF1.0 structures + uses oxm:match-v10-grouping; + } + } + case multipart-request-table-case { + container multipart-request-table { + leaf empty { + type empty; + } + } + } + case multipart-request-port-stats-case { + container multipart-request-port-stats { + leaf port-no { + type uint32; + } + } + } + case multipart-request-queue-case { + container multipart-request-queue { + leaf port-no { + type uint32; + } + leaf queue-id { + type uint32; + } + } + } + case multipart-request-group-case { + container multipart-request-group { + leaf group-id { + type oft:group-id; + } + } + } + case multipart-request-group-desc-case { + container multipart-request-group-desc { + leaf empty { + type empty; + } + } + } + case multipart-request-group-features-case { + container multipart-request-group-features { + leaf empty { + type empty; + } + } + } + case multipart-request-meter-case { + container multipart-request-meter { + leaf meter-id { + type oft:meter-id; + } + } + } + case multipart-request-meter-config-case { + container multipart-request-meter-config { + leaf meter-id { + type oft:meter-id; + } + } + } + case multipart-request-meter-features-case { + container multipart-request-meter-features { + leaf empty { + type empty; + } + } + } + case multipart-request-table-features-case { + container multipart-request-table-features { + list table-features { + leaf table-id { + type uint8; + } + leaf name { + type string; + } + leaf metadata-match { + type uint64; + } + leaf metadata-write { + type uint64; + } + leaf config { + type oft:table-config; + } + leaf max-entries { + type uint32; + } + uses table-features-properties-grouping; + } + } + } + case multipart-request-port-desc-case { + container multipart-request-port-desc { + leaf empty { + type empty; + } + } + } + case multipart-request-experimenter-case { + container multipart-request-experimenter { + // empty body - used for experimenter augmentation + } + } + } + } + grouping multipart-reply { + reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf type { + type oft:multipart-type; + } + leaf flags { + type oft:multipart-request-flags; + } + choice multipart-reply-body { + case multipart-reply-desc-case { + container multipart-reply-desc { + leaf mfr_desc { + type string; + } + leaf hw_desc { + type string; + } + leaf sw_desc { + type string; + } + leaf serial_num { + type string; + } + leaf dp_desc { + type string; + } + } + } + case multipart-reply-flow-case { + container multipart-reply-flow { + list flow-stats { + leaf table-id { + type uint8; + } + leaf duration-sec { + type uint32; + } + leaf duration-nsec { + type uint32; + } + leaf priority { + type uint16; + } + leaf idle-timeout { + type uint16; + } + leaf hard-timeout { + type uint16; + } + leaf flags { + type oft:flow-mod-flags; + } + leaf cookie { + type uint64; + } + leaf packet-count { + type uint64; + } + leaf byte-count { + type uint64; + } + uses oxm:match-grouping; + + uses ofinstruction:instructions-grouping; + + // OF1.0 structures + uses oxm:match-v10-grouping; + uses ofaction:actions-grouping; + } + } + } + case multipart-reply-aggregate-case { + container multipart-reply-aggregate { + leaf packet-count { + type uint64; + } + leaf byte-count { + type uint64; + } + leaf flow-count { + type uint32; + } + } + } + case multipart-reply-table-case { + container multipart-reply-table { + list table-stats { + leaf table-id { + type uint8; + } + leaf active-count { + type uint32; + } + leaf lookup-count { + type uint64; + } + leaf matched-count { + type uint64; + } + + // OF1.0 structures + leaf name { + type string; + } + leaf wildcards { + type oft:flow-wildcards-v10; + } + leaf nw-src-mask { + type uint8; + } + leaf nw-dst-mask { + type uint8; + } + leaf max-entries { + type uint32; + } + } + } + } + case multipart-reply-port-stats-case { + container multipart-reply-port-stats { + list port-stats { + leaf port-no { + type uint32; + } + leaf rx-packets { + type uint64; + } + leaf tx-packets { + type uint64; + } + leaf rx-bytes { + type uint64; + } + leaf tx-bytes { + type uint64; + } + leaf rx-dropped { + type uint64; + } + leaf tx-dropped { + type uint64; + } + leaf rx-errors { + type uint64; + } + leaf tx-errors { + type uint64; + } + leaf rx-frame-err { + type uint64; + } + leaf rx-over-err { + type uint64; + } + leaf rx-crc-err { + type uint64; + } + leaf collisions { + type uint64; + } + leaf duration-sec { + type uint32; + } + leaf duration-nsec { + type uint32; + } + } + } + } + case multipart-reply-queue-case { + container multipart-reply-queue { + list queue-stats { + leaf port-no { + type uint32; + } + leaf queue-id { + type uint32; + } + leaf tx-bytes { + type uint64; + } + leaf tx-packets { + type uint64; + } + leaf tx-errors { + type uint64; + } + leaf duration-sec { + type uint32; + } + leaf duration-nsec { + type uint32; + } + } + } + } + case multipart-reply-group-case { + container multipart-reply-group { + list group-stats { + leaf group-id { + type oft:group-id; + } + leaf ref-count { + type uint32; + } + leaf packet-count { + type uint64; + } + leaf byte-count { + type uint64; + } + leaf duration-sec { + type uint32; + } + leaf duration-nsec { + type uint32; + } + list bucket-stats { + leaf packet-count { + type uint64; + } + leaf byte-count { + type uint64; + } + } + } + } + } + case multipart-reply-group-desc-case { + container multipart-reply-group-desc { + list group-desc { + leaf type { + type oft:group-type; + } + leaf group-id { + type oft:group-id; + } + uses buckets-grouping; + } + } + } + case multipart-reply-group-features-case { + container multipart-reply-group-features { + leaf types { + type oft:group-types; + } + leaf capabilities { + type oft:group-capabilities; + } + leaf-list max_groups { + type uint32; + } + leaf-list actions-bitmap { + type oft:action-type; + } + } + } + case multipart-reply-meter-case { + container multipart-reply-meter { + list meter-stats { + leaf meter-id { + type oft:meter-id; + } + leaf flow-count { + type uint32; + } + leaf packet-in-count { + type uint64; + } + leaf byte-in-count { + type uint64; + } + leaf duration-sec { + type uint32; + } + leaf duration-nsec { + type uint32; + } + list meter-band-stats { + leaf packet-band-count { + type uint64; + } + leaf byte-band-count { + type uint64; + } + } + } + } + } + case multipart-reply-meter-config-case { + container multipart-reply-meter-config { + list meter-config { + leaf flags { + type oft:meter-flags; + } + leaf meter-id { + type oft:meter-id; + } + list bands { + uses meter-band-header; + } + } + } + } + case multipart-reply-meter-features-case { + container multipart-reply-meter-features { + leaf max-meter { + type uint32; + } + leaf band-types { + type oft:meter-band-type-bitmap; + } + leaf capabilities { + type oft:meter-flags; + } + leaf max-bands { + type uint8; + } + leaf max-color { + type uint8; + } + } + } + case multipart-reply-table-features-case { + container multipart-reply-table-features { + list table-features { + leaf table-id { + type uint8; + } + leaf name { + type string; + } + leaf metadata-match { + type binary; + } + leaf metadata-write { + type binary; + } + leaf config { + type oft:table-config; + } + leaf max-entries { + type uint32; + } + uses table-features-properties-grouping; + } + } + } + case multipart-reply-port-desc-case { + container multipart-reply-port-desc { + list ports { + uses port-grouping; + } + } + } + case multipart-reply-experimenter-case { + container multipart-reply-experimenter { + // empty body - used for experimenter augmentation + } + } + } + } + /* Barrier messages. */ + grouping barrier-request { + reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + uses ofHeader; + } + grouping barrier-reply { + reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + uses ofHeader; + } + /* Queue Configuration messages. */ + grouping queue-get-config-request { + reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf port { + type oft:port-number; + } + } + grouping queue-get-config-reply { + reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf port { + type oft:port-number; + } + list queues { + uses packet-queue; + } + } + grouping packet-queue { + leaf queue-id { + type oft:queue-id; + } + leaf port { + type oft:port-number; + } + uses queue-property-header; + } + container queue-prop-container { + uses queue-property-header; + } + grouping queue-property-header { + list queue-property { + config false; + leaf property { + type oft:queue-properties; + } + } + } + /* Controller role change request messages. */ + grouping role-request { + reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf role { + type oft:controller-role; + } + leaf generation-id { + type uint64; + } + } + grouping role-reply { + reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf role { + type oft:controller-role; + } + leaf generation-id { + type uint64; + } + } + /* Asynchronous message configuration. */ + grouping get-async-request { + reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + } + grouping get-async-reply { + reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + uses async-body-grouping; + } + grouping set-async { + reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + uses async-body-grouping; + } + + grouping async-body-grouping { + list packet-in-mask { + leaf-list mask { + type oft:packet-in-reason; + } + } + list port-status-mask { + leaf-list mask { + type oft:port-reason; + } + } + list flow-removed-mask { + leaf-list mask { + type oft:flow-removed-reason; + } + } + } + /* Meters and rate limiters configuration messages. */ + grouping meter-mod { + reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"; + /* Controller/switch message */ + + uses ofHeader; + + leaf command { + type oft:meter-mod-command; + } + leaf flags { + type oft:meter-flags; + } + leaf meter-id { + type oft:meter-id; + } + list bands { + uses meter-band-header; + } + } + + container meter-band-container { + uses meter-band-header; + } + grouping meter-band-header { + choice meter-band { + case meter-band-drop-case { + container meter-band-drop { + uses meter-band-commons; + } + } + case meter-band-dscp-remark-case { + container meter-band-dscp-remark { + uses meter-band-commons; + leaf prec-level { + type uint8; + } + } + } + case meter-band-experimenter-case { + container meter-band-experimenter { + uses meter-band-commons; + } + } + } + } + + grouping meter-band-commons { + leaf type { + type oft:meter-band-type; + } + leaf rate { + type uint32; + } + leaf burst-size { + type uint32; + } + } + + /* Immutable messages. */ + notification hello-message { + uses hello; + reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"; + + /* Symmetric message */ + } + notification error-message { + uses error; + reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"; + + /* Symmetric message */ + } + notification echo-request-message { + uses echo-request; + reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"; + + /* Symmetric message */ + } + notification experimenter-message { + uses experimenter; + reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"; + // TODO:: does switch send this when understood experimenter msg from lib? + /* Symmetric message */ + } + // # Notification and RPCs + /* Symmetric RPC. */ + rpc echo { + input { + uses echo-request; + } + /* Controller/switch message */ + output { + uses echo-reply; + } + } + + rpc echo-reply { + input { + uses echo-reply; + } + } + + rpc hello { + input { + uses hello; + } + } + + rpc experimenter { + input { + uses experimenter; + } + } + + /* Switch configuration messages. */ + rpc get-features { + input { + uses features-request; + } + /* Controller/switch message */ + output { + uses features-reply; + } + } + + rpc get-config { + input { + uses get-config-request; + } + output { + uses get-config-reply; + } + /* Controller/switch message */ + } + + rpc set-config { + input { + uses set-config; + } + /* Controller/switch message */ + } + /* Asynchronous messages. */ + notification packet-in-message { + uses packet-in; + + /* Async message */ + } + notification flow-removed-message { + uses flow-removed; + + /* Async message */ + } + notification port-status-message { + uses port-status; + + } /* Async message */ + + /* Controller command messages. */ + rpc packet-out { + input { + uses packet-out; + } + /* Controller/switch message */ + } + rpc flow-mod { + input { + uses flow-mod; + } + /* Controller/switch message */ + } + rpc group-mod { + input { + uses group-mod; + } + /* Controller/switch message */ + } + rpc port-mod { + input { + uses port-mod; + } + } /* Controller/switch message */ + + rpc table-mod { + input { + uses table-mod; + } + } /* Controller/switch message */ + + /* Multipart messages. */ + + rpc multipart-request { + input { + uses multipart-request; + } + } + + /* Controller/switch message */ + notification multipart-reply-message { + uses multipart-reply; + // notification because of multiple following responses + } /* Controller/switch message */ + + + /* Barrier messages. */ + rpc barrier { + input { + uses barrier-request; + } + output { + uses barrier-reply; + } + } + /* Queue Configuration messages. */ + rpc get-queue-config { + input { + uses queue-get-config-request; + } + output { + uses queue-get-config-reply; + } + } + + /* Controller role change request messages. */ + rpc role-request { + input { + uses role-request; + } + output { + uses role-reply; + } + } /* Controller/switch message */ + + /* Asynchronous message configuration. */ + rpc get-async { + input { + uses get-async-request; + } + output { + uses get-async-reply; + } + } + /* Controller/switch message */ + rpc set-async { + input { + uses set-async; + } + + } + /* Meters and rate limiters configuration messages. */ + rpc meter-mod { + input { + uses meter-mod; + } + } /* Controller/switch message */ } \ No newline at end of file