-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 ofHeader {
- //reference "ofpt_header struct in Openflow Switch 1.3 Spec"
- leaf version {
- type uint8;
- //reference "OpenFlow Header - OFP_VERSION";
- }
- leaf xid {
- type uint32;
- //reference "OpenFlow Header - 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 data {
- type binary;
- }
- }
- }
- grouping error {
- // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
- /* Symmetric message */
- uses ofHeader;
-
- leaf type {
- type oft:error-type;
- }
- leaf code {
- type uint16;
- }
- 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 uint32;
- }
- 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 uint32;
- }
- leaf reserved {
- type uint32;
- }
- }
- 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 uint8;
- }
- 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;
- }
-
- //TODO:: add match leaf
- // leaf match {
- // type oft:match
- // }
-
-// struct ofp_match match; /* Packet metadata. Variable size. */
-// /* The variable size and padded match is always followed by:
-// * - Exactly 2 all-zero padding bytes, then
-// * - An Ethernet frame whose length is inferred from header.length.
-// * The padding bytes preceding the Ethernet frame ensure that the IP
-// * header (if any) following the Ethernet header is 32-bit aligned.
-// */
- leaf data {
- type binary;
- }
-
- }
- 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;
- }
- //TODO:: add match leaf
- //leaf match {
- // type oft:match;
- //}
- }
- grouping port-status {
- // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
-
- uses ofHeader;
-
- uses port;
-
- leaf reason {
- type oft:port-reason;
- }
- } /* Async message */
- /* Controller command messages. */
- grouping packet-out {
- // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
- /* Controller/switch message */
-
- uses ofHeader;
-
- list actions {
- uses ofaction:action-header;
-
- 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 uint16;
- }
- //TODO:: add match leaf
- }
- 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 uint32;
- }
-
- list buckets {
- uses bucket;
- }
- }
- grouping bucket {
- leaf weight {
- type uint16;
- }
- leaf watch-port {
- type oft:port-number;
- }
- leaf watch-group {
- type uint32;
- }
-
- list actions {
- uses ofaction:action-header;
- }
- }
- 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-config;
- }
- }
- 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:port-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-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;
- }
- leaf match {
- type identityref {
- base oft:match-type-base;
- }
- }
- }
- case 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;
- }
- leaf match {
- type identityref {
- base oft:match-type-base;
- }
- }
- }
- case multipart-request-port-stats {
- leaf port-no {
- type uint32;
- }
- }
- case multipart-request-queue {
- leaf port-no {
- type uint32;
- }
- leaf queue-id {
- type uint32;
- }
- }
- case multipart-request-group {
- leaf group-id {
- type uint32;
- }
- }
- case multipart-request-meter {
- leaf meter-id {
- type uint32;
- }
- }
- case multipart-request-meter-config {
- leaf meter-id {
- type uint32;
- }
- }
- case 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;
- }
- }
- }
- case multipart-request-experimenter {
- leaf experimenter {
- type uint32;
- }
- leaf exp-type {
- type uint32;
- }
- }
- }
- }
- 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 {
- 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 {
- 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 uint16;
- }
- leaf cookie {
- type uint64;
- }
- leaf packet-count {
- type uint64;
- }
- leaf byte-count {
- type uint64;
- }
- leaf match {
- type uint64;
- }
- }
- }
- case multipart-reply-aggregate {
- leaf packet-count {
- type uint64;
- }
- leaf byte-count {
- type uint64;
- }
- leaf flow-count {
- type uint32;
- }
- }
- case 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;
- }
- }
- }
- case 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 {
- 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 {
- list group-stats {
- leaf group-id {
- type uint32;
- }
- 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 {
- list group-desc {
- leaf type {
- type uint8;
- }
- leaf group-id {
- type uint32;
- }
- list buckets {
- uses bucket;
- }
- }
- }
- case 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 {
- type ofaction:action-type;
- }
- }
- case multipart-reply-meter {
- list meter-stats {
- leaf meter-id {
- type uint32;
- }
- 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 {
- list meter-config {
- leaf flags {
- type oft:meter-mod-command;
- }
- leaf meter-id {
- type uint32;
- }
- list bands {
- uses meter-band-header;
- }
- }
- }
- case multipart-reply-meter-features {
- leaf max-meter {
- type uint32;
- }
- leaf band-types {
- type oft:meter-band-type;
- }
- leaf capabilities {
- type oft:meter-flags;
- }
- leaf max-bands {
- type uint8;
- }
- leaf max-color {
- type uint8;
- }
- }
- case 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:port-config;
- }
- leaf max-entries {
- type uint32;
- }
- }
- }
- case multipart-reply-port-desc {
- list ports {
- uses port;
- }
- }
- case multipart-reply-experimenter {
- leaf experimenter {
- type uint32;
- }
- leaf exp-type {
- type uint32;
- }
- }
- }
- }
- /* 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;
- }
- list properties {
- uses queue-property-header;
- }
- }
- grouping queue-property-header {
- leaf property {
- type oft:queue-property;
- }
- }
- /* 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;
-
- 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;
- }
- }
- }
- grouping set-async {
- // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
- /* Controller/switch message */
-
- uses ofHeader;
-
- leaf-list packet-in-mask {
- type oft:packet-in-reason;
- }
- leaf-list port-status-mask {
- type oft:port-reason;
- }
- leaf-list flow-removed-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;
- }
- }
-
- grouping meter-band-header {
- 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 {
- // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
- input {
- uses echo-request;
- }
- /* Controller/switch message */
- output {
- uses echo-reply;
- }
- }
-
- rpc echo-reply {
- // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
- input {
- uses echo-reply;
- }
- }
-
- rpc hello {
- // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
- input {
- uses hello;
- }
- }
-
- rpc experimenter {
- // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
- input {
- uses experimenter;
- }
- }
-
- /* 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 */
- }
-
- rpc 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-message {
- uses packet-in;
- // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
-
- /* Async message */
- }
- notification flow-removed-message {
- uses flow-removed;
- // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
-
- /* Async message */
- }
- notification port-status-message {
- 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-message {
- uses multipart-request;
- // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
-
- } /* Controller/switch message */
- notification multipart-reply-message {
- 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. */
- rpc get-async {
- input {
- uses get-async-request;
- // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
- }
- output {
- uses get-async-reply;
- // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
- }
- }
- /* Controller/switch message */
- rpc set-async {
- input {
- uses set-async;
- // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
- }
-
- }
- /* 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 */
+module openflow-protocol {\r
+ namespace "urn:opendaylight:openflow:protocol";\r
+ prefix "ofproto";\r
+\r
+\r
+ import ietf-inet-types {prefix inet;}\r
+ import ietf-yang-types {prefix yang;}\r
+ \r
+ import openflow-types {prefix oft;}\r
+ import openflow-extensible-match { prefix oxm;}\r
+ import openflow-instruction { prefix ofinstruction;}\r
+ import openflow-action {prefix ofaction;}\r
+\r
+\r
+\r
+ revision "2013-07-31" {\r
+ description "Initial model";\r
+ }\r
+\r
+ // Generic Structures\r
+\r
+ grouping port {\r
+ // reference "ofp_port";\r
+ leaf port-no { \r
+ // reference "ofp_port.port_no"; \r
+ type uint32;\r
+ }\r
+ leaf hw-addr { \r
+ // reference "ofp_port.hw_addr"; \r
+ type yang:mac-address;\r
+ }\r
+ leaf name { \r
+ // reference "ofp_port.name"; \r
+ type string;\r
+ }\r
+ leaf config { \r
+ // reference "ofp_port.config"; \r
+ type oft:port-config;\r
+ }\r
+ leaf state { \r
+ // reference "ofp_port.state"; \r
+ type oft:port-state;\r
+ }\r
+ leaf current-features { \r
+ description "Current features.";\r
+ // reference "ofp_port.curr"; \r
+ type oft:port-features; \r
+ }\r
+ leaf advertised-features { \r
+ description "Features being advertised by the port.";\r
+ // reference "ofp_port.advertised"; \r
+ type oft:port-features; \r
+ }\r
+ leaf supported-features { \r
+ description "Features supported by the port.";\r
+ // reference "ofp_port.supported"; \r
+ type oft:port-features; \r
+ }\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
+ description "Current port bitrate in kbps.";\r
+ // reference "ofp_port.curr_speed"; \r
+ type uint32; \r
+ units "kbps";\r
+ }\r
+ leaf max_speed { \r
+ description "Max port bitrate in kbps";\r
+ // reference "ofp_port.max_speed"; \r
+ type uint32;\r
+ units "kbps"; \r
+ }\r
+ }\r
+\r
+ // TODO: ofp_packat_queue\r
+\r
+ // # MESSAGE Structures\r
+ /* Immutable messages. */\r
+ grouping ofHeader {\r
+ //reference "ofpt_header struct in Openflow Switch 1.3 Spec"\r
+ leaf version {\r
+ type uint8;\r
+ //reference "OpenFlow Header - OFP_VERSION";\r
+ }\r
+ leaf xid {\r
+ type uint32;\r
+ //reference "OpenFlow Header - transaction id";\r
+ }\r
+ }\r
+ grouping ofHelloElementHeader {\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
+ /* Symmetric message */\r
+ uses ofHeader;\r
+ \r
+ list elements {\r
+ uses ofHelloElementHeader;\r
+ \r
+ leaf data {\r
+ type binary;\r
+ }\r
+ }\r
+ }\r
+ grouping error {\r
+ // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"\r
+ /* Symmetric message */\r
+ uses ofHeader;\r
+ \r
+ leaf type {\r
+ type oft:error-type;\r
+ }\r
+ leaf code {\r
+ type uint16;\r
+ }\r
+ leaf data {\r
+ type binary; \r
+ }\r
+ }\r
+ grouping echo-request {\r
+ // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
+ /* Symmetric message */\r
+ uses ofHeader;\r
+ \r
+ leaf data {\r
+ type binary;\r
+ }\r
+ }\r
+ grouping echo-reply {\r
+ // reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"\r
+ /* Symmetric message */\r
+ uses ofHeader;\r
+ \r
+ leaf data {\r
+ type binary;\r
+ }\r
+ }\r
+ grouping experimenter {\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
+ }\r
+ leaf exp_type {\r
+ type uint32;\r
+ }\r
+ }\r
+ /* Switch configuration messages. */\r
+ grouping features-request {\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
+ /* Controller/switch message */\r
+ uses ofHeader;\r
+ \r
+ leaf datapathId {\r
+ type uint64;\r
+ }\r
+ leaf buffers {\r
+ type uint32;\r
+ }\r
+ leaf tables {\r
+ type uint8;\r
+ }\r
+ leaf auxiliaryId {\r
+ type uint8;\r
+ }\r
+ leaf capabilities {\r
+ type uint32;\r
+ }\r
+ leaf reserved {\r
+ type uint32;\r
+ }\r
+ }\r
+ grouping get-config-request {\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
+ /* Controller/switch message */\r
+ uses ofHeader;\r
+ \r
+ leaf flags {\r
+ type oft:switch-config-flag;\r
+ }\r
+ leaf miss-send-len {\r
+ type uint16;\r
+ }\r
+ }\r
+ grouping set-config {\r
+ // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf flags {\r
+ type oft:switch-config-flag;\r
+ }\r
+ leaf miss-send-len {\r
+ type uint16;\r
+ }\r
+ }\r
+ /* Asynchronous messages. */\r
+ grouping packet-in {\r
+ // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"\r
+ /* Async message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf buffer-id {\r
+ // ID assigned by datapath.\r
+ type uint32;\r
+ } \r
+ leaf total-len {\r
+ // Full length of frame.\r
+ type uint16;\r
+ }\r
+ leaf reason {\r
+ // Reason packet is being sent (one of OFPR_*) \r
+ type uint8;\r
+ }\r
+ leaf table-id {\r
+ // ID of the table that was looked up\r
+ type oft:table-id;\r
+ }\r
+ leaf cookie {\r
+ // Cookie of the flow entry that was looked up.\r
+ type uint64;\r
+ }\r
+ \r
+ //TODO:: add match leaf\r
+ // leaf match {\r
+ // type oft:match\r
+ // }\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
+ leaf data {\r
+ type binary;\r
+ }\r
+ \r
+ }\r
+ grouping flow-removed {\r
+ // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"\r
+ /* Async message */\r
+ uses ofHeader;\r
+ \r
+ leaf cookie {\r
+ type uint64;\r
+ }\r
+ leaf priority {\r
+ type uint16;\r
+ }\r
+ leaf reason {\r
+ type oft:flow-removed-reason;\r
+ }\r
+ leaf table-id {\r
+ type oft:table-id;\r
+ }\r
+ leaf duration-sec {\r
+ type uint32;\r
+ }\r
+ leaf duration-nsec {\r
+ type uint32;\r
+ }\r
+ leaf idle-timeout {\r
+ type uint16;\r
+ }\r
+ leaf hard-timeout {\r
+ type uint16;\r
+ }\r
+ leaf packet-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-count {\r
+ type uint64;\r
+ }\r
+ //TODO:: add match leaf\r
+ //leaf match {\r
+ // type oft:match;\r
+ //}\r
+ } \r
+ grouping port-status {\r
+ // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"\r
+ \r
+ uses ofHeader;\r
+ \r
+ uses port;\r
+ \r
+ leaf reason {\r
+ type oft:port-reason;\r
+ }\r
+ } /* Async message */\r
+ /* Controller command messages. */\r
+ grouping packet-out {\r
+ // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ list actions {\r
+ uses ofaction:action-header;\r
+ \r
+ leaf data {\r
+ type binary;\r
+ }\r
+ }\r
+ \r
+ leaf buffer-id {\r
+ type uint32;\r
+ }\r
+ leaf in-port {\r
+ type oft:port-number;\r
+ }\r
+ } \r
+ grouping flow-mod {\r
+ // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf cookie {\r
+ type uint64;\r
+ }\r
+ leaf cookie-mask {\r
+ type uint64;\r
+ }\r
+ leaf table-id {\r
+ type oft:table-id;\r
+ }\r
+ leaf command {\r
+ type oft:flow-mod-command;\r
+ }\r
+ leaf idle-timeout {\r
+ type uint16;\r
+ }\r
+ leaf hard-timeout {\r
+ type uint16;\r
+ }\r
+ leaf priority {\r
+ type uint16;\r
+ }\r
+ leaf buffer-id {\r
+ type uint32;\r
+ }\r
+ leaf out-port {\r
+ type oft:port-number;\r
+ }\r
+ leaf out-group {\r
+ type uint32;\r
+ }\r
+ leaf flags {\r
+ type uint16;\r
+ }\r
+ //TODO:: add match leaf\r
+ } \r
+ grouping group-mod {\r
+ // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf command {\r
+ type oft:group-mod-command;\r
+ }\r
+ leaf type {\r
+ type oft:group-type;\r
+ }\r
+ leaf group-id {\r
+ type uint32;\r
+ }\r
+ \r
+ list buckets {\r
+ uses bucket;\r
+ }\r
+ }\r
+ grouping bucket {\r
+ leaf weight {\r
+ type uint16;\r
+ }\r
+ leaf watch-port {\r
+ type oft:port-number;\r
+ }\r
+ leaf watch-group {\r
+ type uint32;\r
+ }\r
+ \r
+ list actions {\r
+ uses ofaction:action-header;\r
+ }\r
+ }\r
+ grouping port-mod {\r
+ // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader;\r
+ \r
+ leaf port-no {\r
+ type oft:port-number;\r
+ }\r
+ leaf hw-address {\r
+ type yang:mac-address;\r
+ } \r
+ leaf config {\r
+ type oft:port-config;\r
+ } \r
+ leaf mask {\r
+ type oft:port-config;\r
+ } \r
+ leaf advertise {\r
+ type oft:port-features;\r
+ }\r
+ } \r
+ grouping table-mod {\r
+ // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader;\r
+ \r
+ leaf table-id {\r
+ type oft:table-id;\r
+ }\r
+ leaf config {\r
+ type oft:port-config;\r
+ } \r
+ } \r
+ \r
+ /* Multipart messages. */\r
+ grouping multipart-request {\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
+ leaf flags {\r
+ type oft:multipart-request-flags;\r
+ } \r
+ choice multipart-request-body {\r
+ case multipart-request-flow {\r
+ leaf table-id {\r
+ type uint8;\r
+ }\r
+ leaf out-port {\r
+ type uint32;\r
+ }\r
+ leaf out-group {\r
+ type uint32;\r
+ }\r
+ leaf cookie {\r
+ type uint64;\r
+ }\r
+ leaf cookie-mask {\r
+ type uint64;\r
+ }\r
+ leaf match {\r
+ type identityref {\r
+ base oft:match-type-base;\r
+ }\r
+ }\r
+ }\r
+ case multipart-request-aggregate {\r
+ leaf table-id {\r
+ type uint8;\r
+ }\r
+ leaf out-port {\r
+ type uint32;\r
+ }\r
+ leaf out-group {\r
+ type uint32;\r
+ }\r
+ leaf cookie {\r
+ type uint64;\r
+ }\r
+ leaf cookie-mask {\r
+ type uint64;\r
+ }\r
+ leaf match {\r
+ type identityref {\r
+ base oft:match-type-base;\r
+ }\r
+ }\r
+ }\r
+ case multipart-request-port-stats {\r
+ leaf port-no {\r
+ type uint32;\r
+ }\r
+ }\r
+ case multipart-request-queue {\r
+ leaf port-no {\r
+ type uint32;\r
+ }\r
+ leaf queue-id {\r
+ type uint32;\r
+ }\r
+ }\r
+ case multipart-request-group {\r
+ leaf group-id {\r
+ type uint32;\r
+ }\r
+ }\r
+ case multipart-request-meter {\r
+ leaf meter-id {\r
+ type uint32;\r
+ }\r
+ }\r
+ case multipart-request-meter-config {\r
+ leaf meter-id {\r
+ type uint32;\r
+ }\r
+ }\r
+ case multipart-request-table-features {\r
+ list table_features {\r
+ leaf table-id {\r
+ type uint8;\r
+ }\r
+ leaf name {\r
+ type string;\r
+ }\r
+ leaf metadata-match {\r
+ type uint64;\r
+ }\r
+ leaf metadata-write {\r
+ type uint64;\r
+ }\r
+ leaf config {\r
+ type oft:table-config;\r
+ }\r
+ leaf max-entries {\r
+ type uint32;\r
+ }\r
+ }\r
+ }\r
+ case multipart-request-experimenter {\r
+ leaf experimenter {\r
+ type uint32;\r
+ }\r
+ leaf exp-type {\r
+ type uint32;\r
+ }\r
+ }\r
+ }\r
+ } \r
+ grouping multipart-reply {\r
+ // reference "OFPT_MULTIPART_REPLY 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
+ leaf flags {\r
+ type oft:multipart-request-flags;\r
+ }\r
+ choice multipart-reply-body {\r
+ case multipart-reply-desc {\r
+ leaf mfr_desc {\r
+ type string;\r
+ }\r
+ leaf hw_desc {\r
+ type string;\r
+ }\r
+ leaf sw_desc {\r
+ type string;\r
+ }\r
+ leaf serial_num {\r
+ type string;\r
+ }\r
+ leaf dp_desc {\r
+ type string;\r
+ }\r
+ }\r
+ case multipart-reply-flow {\r
+ list flow-stats {\r
+ leaf table-id {\r
+ type uint8;\r
+ }\r
+ leaf duration-sec {\r
+ type uint32;\r
+ }\r
+ leaf duration-nsec {\r
+ type uint32;\r
+ }\r
+ leaf priority {\r
+ type uint16;\r
+ }\r
+ leaf idle-timeout {\r
+ type uint16;\r
+ }\r
+ leaf hard-timeout {\r
+ type uint16;\r
+ }\r
+ leaf flags {\r
+ type uint16;\r
+ }\r
+ leaf cookie {\r
+ type uint64;\r
+ }\r
+ leaf packet-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-count {\r
+ type uint64;\r
+ }\r
+ leaf match {\r
+ type uint64;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-aggregate {\r
+ leaf packet-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-count {\r
+ type uint64;\r
+ }\r
+ leaf flow-count {\r
+ type uint32;\r
+ }\r
+ }\r
+ case multipart-reply-table {\r
+ list table-stats {\r
+ leaf table-id {\r
+ type uint8;\r
+ }\r
+ leaf active-count {\r
+ type uint32;\r
+ }\r
+ leaf lookup-count {\r
+ type uint64;\r
+ }\r
+ leaf matched-count {\r
+ type uint64;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-port-stats {\r
+ list port-stats {\r
+ leaf port-no {\r
+ type uint32;\r
+ }\r
+ leaf rx-packets {\r
+ type uint64;\r
+ }\r
+ leaf tx-packets {\r
+ type uint64;\r
+ }\r
+ leaf rx-bytes {\r
+ type uint64;\r
+ }\r
+ leaf tx-bytes {\r
+ type uint64;\r
+ }\r
+ leaf rx-dropped {\r
+ type uint64;\r
+ }\r
+ leaf tx-dropped {\r
+ type uint64;\r
+ }\r
+ leaf rx-errors {\r
+ type uint64;\r
+ }\r
+ leaf tx-errors {\r
+ type uint64;\r
+ }\r
+ leaf rx-frame-err {\r
+ type uint64;\r
+ }\r
+ leaf rx-over-err {\r
+ type uint64;\r
+ }\r
+ leaf rx-crc-err {\r
+ type uint64;\r
+ }\r
+ leaf collisions {\r
+ type uint64;\r
+ }\r
+ leaf duration-sec {\r
+ type uint32;\r
+ }\r
+ leaf duration-nsec {\r
+ type uint32;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-queue {\r
+ list queue-stats {\r
+ leaf port-no {\r
+ type uint32;\r
+ }\r
+ leaf queue-id {\r
+ type uint32;\r
+ }\r
+ leaf tx-bytes {\r
+ type uint64;\r
+ }\r
+ leaf tx-packets {\r
+ type uint64;\r
+ }\r
+ leaf tx-errors {\r
+ type uint64;\r
+ }\r
+ leaf duration-sec {\r
+ type uint32;\r
+ }\r
+ leaf duration-nsec {\r
+ type uint32;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-group {\r
+ list group-stats {\r
+ leaf group-id {\r
+ type uint32;\r
+ }\r
+ leaf ref-count {\r
+ type uint32;\r
+ }\r
+ leaf packet-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-count {\r
+ type uint64;\r
+ }\r
+ leaf duration-sec {\r
+ type uint32;\r
+ }\r
+ leaf duration-nsec {\r
+ type uint32;\r
+ }\r
+ list bucket-stats {\r
+ leaf packet-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-count {\r
+ type uint64;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-group-desc {\r
+ list group-desc {\r
+ leaf type {\r
+ type uint8;\r
+ }\r
+ leaf group-id {\r
+ type uint32;\r
+ }\r
+ list buckets {\r
+ uses bucket;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-group-features {\r
+ leaf types {\r
+ type oft:group-types;\r
+ }\r
+ leaf capabilities {\r
+ type oft:group-capabilities;\r
+ }\r
+ leaf-list max_groups {\r
+ type uint32;\r
+ }\r
+ leaf-list actions {\r
+ type ofaction:action-type;\r
+ }\r
+ }\r
+ case multipart-reply-meter {\r
+ list meter-stats {\r
+ leaf meter-id {\r
+ type uint32;\r
+ }\r
+ leaf flow-count {\r
+ type uint32;\r
+ }\r
+ leaf packet-in-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-in-count {\r
+ type uint64;\r
+ }\r
+ leaf duration-sec {\r
+ type uint32;\r
+ }\r
+ leaf duration-nsec {\r
+ type uint32;\r
+ }\r
+ list meter-band-stats {\r
+ leaf packet-band-count {\r
+ type uint64;\r
+ }\r
+ leaf byte-band-count {\r
+ type uint64;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-meter-config {\r
+ list meter-config {\r
+ leaf flags {\r
+ type oft:meter-mod-command;\r
+ }\r
+ leaf meter-id {\r
+ type uint32;\r
+ }\r
+ list bands {\r
+ uses meter-band-header;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-meter-features {\r
+ leaf max-meter {\r
+ type uint32;\r
+ }\r
+ leaf band-types {\r
+ type oft:meter-band-type;\r
+ }\r
+ leaf capabilities {\r
+ type oft:meter-flags;\r
+ }\r
+ leaf max-bands {\r
+ type uint8;\r
+ }\r
+ leaf max-color {\r
+ type uint8;\r
+ }\r
+ }\r
+ case multipart-reply-table-features {\r
+ list table-features {\r
+ leaf table-id {\r
+ type uint8;\r
+ }\r
+ leaf name {\r
+ type string;\r
+ }\r
+ leaf metadata-match {\r
+ type binary;\r
+ }\r
+ leaf metadata-write {\r
+ type binary;\r
+ }\r
+ leaf config {\r
+ type oft:port-config;\r
+ } \r
+ leaf max-entries {\r
+ type uint32;\r
+ }\r
+ }\r
+ }\r
+ case multipart-reply-port-desc {\r
+ list ports {\r
+ uses port;\r
+ }\r
+ }\r
+ case multipart-reply-experimenter {\r
+ leaf experimenter {\r
+ type uint32;\r
+ }\r
+ leaf exp-type {\r
+ type uint32;\r
+ }\r
+ }\r
+ }\r
+ } \r
+ /* Barrier messages. */\r
+ grouping barrier-request {\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
+ /* 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
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf port {\r
+ type oft:port-number;\r
+ }\r
+ } \r
+ grouping queue-get-config-reply {\r
+ // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader;\r
+ \r
+ leaf port {\r
+ type oft:port-number;\r
+ }\r
+ list queues {\r
+ uses packet-queue;\r
+ }\r
+ } \r
+ grouping packet-queue {\r
+ leaf queue-id {\r
+ type oft:queue-id;\r
+ }\r
+ leaf port {\r
+ type oft:port-number;\r
+ }\r
+ list properties {\r
+ uses queue-property-header;\r
+ }\r
+ }\r
+ grouping queue-property-header {\r
+ leaf property {\r
+ type oft:queue-property;\r
+ }\r
+ }\r
+ /* Controller role change request messages. */\r
+ grouping role-request {\r
+ // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf role {\r
+ type oft:controller-role;\r
+ }\r
+ leaf generation-id {\r
+ type uint64;\r
+ }\r
+ } \r
+ grouping role-reply {\r
+ // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader;\r
+ \r
+ leaf role {\r
+ type oft:controller-role;\r
+ }\r
+ leaf generation-id {\r
+ type uint64;\r
+ }\r
+ } \r
+ /* Asynchronous message configuration. */\r
+ grouping get-async-request {\r
+ // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader; \r
+ } \r
+ grouping get-async-reply {\r
+ // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader;\r
+ \r
+ list packet-in-mask {\r
+ leaf-list mask {\r
+ type oft:packet-in-reason;\r
+ }\r
+ }\r
+ list port-status-mask {\r
+ leaf-list mask {\r
+ type oft:port-reason;\r
+ }\r
+ }\r
+ list flow-removed-mask {\r
+ leaf-list mask {\r
+ type oft:flow-removed-reason;\r
+ }\r
+ }\r
+ } \r
+ grouping set-async {\r
+ // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+ \r
+ uses ofHeader;\r
+ \r
+ leaf-list packet-in-mask {\r
+ type oft:packet-in-reason;\r
+ }\r
+ leaf-list port-status-mask {\r
+ type oft:port-reason;\r
+ }\r
+ leaf-list flow-removed-mask {\r
+ type oft:flow-removed-reason;\r
+ }\r
+ } \r
+ /* Meters and rate limiters configuration messages. */\r
+ grouping meter-mod {\r
+ // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"\r
+ /* Controller/switch message */\r
+\r
+ uses ofHeader;\r
+ \r
+ leaf command {\r
+ type oft:meter-mod-command;\r
+ } \r
+ leaf flags {\r
+ type oft:meter-flags;\r
+ } \r
+ leaf meter-id {\r
+ type oft:meter-id;\r
+ } \r
+ list bands {\r
+ uses meter-band-header;\r
+ }\r
+ } \r
+ \r
+ grouping meter-band-header {\r
+ leaf type {\r
+ type oft:meter-band-type;\r
+ }\r
+ leaf rate {\r
+ type uint32;\r
+ }\r
+ leaf burst-size {\r
+ type uint32;\r
+ }\r
+ }\r
+\r
+\r
+\r
+ /* Immutable messages. */\r
+ notification hello-message {\r
+ uses hello;\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
+ \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
+ \r
+ /* Symmetric message */\r
+ }\r
+ notification experimenter-message {\r
+ uses experimenter;\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
+ /* Controller/switch message */\r
+ output {\r
+ uses echo-reply;\r
+ }\r
+ }\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
+ }\r
+\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
+ /* Controller/switch message */\r
+ output {\r
+ uses features-reply;\r
+ }\r
+ }\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
+ output {\r
+ uses get-config-reply;\r
+ }\r
+ /* Controller/switch message */\r
+ }\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
+ /* Controller/switch message */\r
+ }\r
+ /* 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
+ /* Controller command messages. */\r
+ 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
+ /* Multipart messages. */\r
+ //FIXME: Arent this wire protocol specific?\r
+\r
+ notification multipart-request-message {\r
+ uses multipart-request;\r
+ // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"\r
+ \r
+ } /* 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
+ \r
+ } /* Controller/switch message */\r
+ \r
+\r
+ /* Barrier messages. */\r
+ 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
+ /* Controller role change request messages. */\r
+ 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
+ /* Asynchronous message configuration. */\r
+ 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
+ /* Meters and rate limiters configuration messages. */\r
+ 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