-module openflow-action {
+/*
+ * 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-action {
namespace "urn:opendaylight:openflow:common:action";
prefix "ofaction";
+ import ietf-inet-types {prefix inet;}
+ import ietf-yang-types {prefix yang;}
+
import openflow-types { prefix oft; }
+ import openflow-extensible-match { prefix oxm;}
- revision "2013-07-31" {
- description "Initial model";
+ revision "2015-02-03" {
+ description "OpenFlow 1.3 - action model";
}
- identity output {
- description " Output to switch port. ";
- base oft:action;
- }
- identity copy_ttl_out {
- description " Copy TTL \"outwards\" -- from next-to-outermost to outermost ";
- base oft:action;
- }
- identity copy_ttl_in {
- description " Copy TTL \"inwards\" -- from outermost to next-to-outermost ";
- base oft:action;
- }
- identity set_mpls_ttl {
- description " MPLS TTL ";
- base oft:action;
- }
- identity dec_mpls_ttl {
- description " Decrement MPLS TTL ";
- base oft:action;
- }
- identity push_vlan {
- description " Push a new VLAN tag ";
- base oft:action;
- }
- identity pop_vlan {
- description " Pop the outer VLAN tag ";
- base oft:action;
- }
- identity push_mpls {
- description " Push a new MPLS tag ";
- base oft:action;
- }
- identity pop_mpls {
- description " Pop the outer MPLS tag ";
- base oft:action;
- }
- identity set_queue {
- description " Set queue id when outputting to a port ";
- base oft:action;
- }
- identity group {
- description " Apply group. ";
- base oft:action;
- }
- identity set_nw_ttl {
- description " IP TTL. ";
- base oft:action;
- }
- identity dec_nw_ttl {
- description " Decrement IP TTL. ";
- base oft:action;
- }
- identity set_field {
- description " Set a header field using OXM TLV format. ";
- base oft:action;
+ identity experimenter-action-sub-type {
+ description "The base identity for vendor's actions.";
}
- identity push_pbb {
- description " Push a new PBB service tag (I-TAG) ";
- base oft:action;
- }
- identity pop_pbb {
- description " Pop the outer PBB service tag (I-TAG) ";
- base oft:action;
- }
- identity experimenter {
- description "";
- base oft:action;
+
+ container action-container {
+ uses action-grouping;
}
-
- /*
- grouping output {
- description
- "Action structure for OFPAT_OUTPUT, which sends packets out 'port'.
- When the 'port' is the OFPP_CONTROLLER, 'max_len' indicates the max
- number of bytes to send. A 'max_len' of zero means no bytes of the
- packet should be sent. A 'max_len' of OFPCML_NO_BUFFER means that
- the packet is not buffered and the complete packet is to be sent to
- the controller.";
- leaf port {
- type oft:any-port-number;
+
+ grouping actions-grouping {
+ list action {
+ uses action-grouping;
+ leaf experimenter-id {
+ type oft:experimenter-id;
+ }
}
- leaf max-length {
- description "Maximum packet length to be send to controller.";
- type union {
- type uint16 {
- range "0..65294"; // 0..0xff0e
+ }
+
+ grouping action-grouping {
+ choice action-choice {
+ case output-action-case {
+ container output-action {
+ leaf port {
+ type oft:port-number;
+ }
+ leaf max-length {
+ type uint16;
+ }
}
- type enumeration {
- enum max {
- desription
- "maximum max_len value which can be used
- to request a specific byte length";
- value 65509; //0xffe5
+ }
+ case copy-ttl-out-case {
+ // empty action
+ }
+ case copy-ttl-in-case {
+ // empty action
+ }
+ case set-mpls-ttl-case {
+ container set-mpls-ttl-action {
+ leaf mpls-ttl {
+ type uint8;
}
- enum no-buffer {
- description
- "indicates that no buffering should be
- applied and the whole packet is to be
- sent to the controller";
- value 65535; //0xffff
+ }
+ }
+ case dec-mpls-ttl-case {
+ // empty action
+ }
+ case push-vlan-case {
+ container push-vlan-action {
+ leaf ethertype {
+ type oft:ether-type;
}
}
}
- }
- }
-
- grouping group {
- leaf group {
- type oft:group-id; // define action group-id type;
- }
- }
-
- grouping set-queue {
- leaf queue {
- type oft:queue-id;
- }
- }
-
- grouping set-mpls-ttl {
- leaf mpls_ttl {
- type uint8;
- }
- }
-
- grouping set-nw-ttl {
- leaf nw_ttl {
- type uint8;
- }
- }
-
- grouping push-pbb {
- leaf ethertype {
- type oft:ether-type;
- }
- }
-
- grouping push-mpls {
- leaf ethertype {
- type oft:ether-type;
- }
- }
-
- grouping push-vlan {
- leaf ethertype {
- type oft:ether-type;
- }
- }
-
- grouping pop-mpls {
- leaf ethertype {
- type oft:ether-type;
- }
- }
-
- grouping set-field {
- container field {
- // TODO: figure definition
- }
- }
- */
-
- container actions {
- uses action-header;
- }
-
- grouping action-header {
- leaf type {
- type identityref {
- base oft:action;
+ case pop-vlan-case {
+ // empty action
+ }
+ case push-mpls-case {
+ container push-mpls-action {
+ leaf ethertype {
+ type oft:ether-type;
+ }
+ }
+ }
+ case pop-mpls-case {
+ container pop-mpls-action {
+ leaf ethertype {
+ type oft:ether-type;
+ }
+ }
+ }
+ case set-queue-case {
+ container set-queue-action {
+ leaf queue-id {
+ type uint32;
+ }
+ }
+ }
+ case group-case {
+ container group-action {
+ leaf group-id {
+ type uint32;
+ }
+ }
+ }
+ case set-nw-ttl-case {
+ container set-nw-ttl-action {
+ leaf nw-ttl {
+ type uint8;
+ }
+ }
+ }
+ case dec-nw-ttl-case {
+ // empty action
+ }
+ case set-field-case {
+ container set-field-action {
+ uses oxm:match-entries-grouping;
+ }
+ }
+ case push-pbb-case {
+ container push-pbb-action {
+ leaf ethertype {
+ type oft:ether-type;
+ }
+ }
+ }
+ case pop-pbb-case {
+ // empty action
+ }
+ // OF1.0 structures
+ case set-vlan-vid-case {
+ container set-vlan-vid-action {
+ leaf vlan-vid {
+ type uint16;
+ }
+ }
+ }
+ case set-vlan-pcp-case {
+ container set-vlan-pcp-action {
+ leaf vlan-pcp {
+ type uint8;
+ }
+ }
+ }
+ case strip-vlan-case {
+ // empty action
+ }
+ case set-dl-src-case {
+ container set-dl-src-action {
+ leaf dl-src-address {
+ type yang:mac-address;
+ }
+ }
+ }
+ case set-dl-dst-case {
+ container set-dl-dst-action {
+ leaf dl-dst-address {
+ type yang:mac-address;
+ }
+ }
+ }
+ case set-nw-src-case {
+ container set-nw-src-action {
+ leaf ip-address {
+ type inet:ipv4-address;
+ }
+ }
+ }
+ case set-nw-dst-case {
+ container set-nw-dst-action {
+ leaf ip-address {
+ type inet:ipv4-address;
+ }
+ }
+ }
+ case set-nw-tos-case {
+ container set-nw-tos-action {
+ leaf nw-tos {
+ type uint8;
+ }
+ }
+ }
+ case set-tp-src-case {
+ container set-tp-src-action {
+ leaf port {
+ type oft:port-number;
+ }
+ }
+ }
+ case set-tp-dst-case {
+ container set-tp-dst-action {
+ leaf port {
+ type oft:port-number;
+ }
+ }
+ }
+ case enqueue-case {
+ container enqueue-action {
+ leaf port {
+ type oft:port-number;
+ }
+ leaf queue-id {
+ type oft:queue-id;
+ }
+ }
}
}
}
-
-}
\ No newline at end of file
+
+}