+++ /dev/null
-module opendaylight-flow-base {
- namespace "urn:opendaylight:flow:base";
- prefix "flowbase";
-
- import yang-ext {prefix ext;}
- import ietf-inet-types {prefix inet;}
- import ietf-yang-types {prefix yang;}
- import opendaylight-inventory {prefix inv;}
- import opendaylight-l2-types {prefix l2t;}
-
- revision "2013-08-19" {
- description "Initial revision of flow service";
- }
-
- /** Match Groupings **/
- grouping "ethernet-match-fields" {
- container ethernet-source {
- //description "Ethernet source address.";
- //presence "Match field is active and set";
- leaf address {
- mandatory true;
- type yang:mac-address;
- }
- leaf mask {
- type binary;
- }
- }
- container ethernet-destination {
- description "Ethernet destination address.";
- presence "Match field is active and set";
- leaf address {
- mandatory true;
- type yang:mac-address;
- }
- }
- container ethernet-type {
- description "Ethernet frame type.";
- presence "Match field is active and set";
-
- leaf type {
- mandatory true;
- type l2t:ether-type; // Needs to define that as general model
- }
- leaf mask {
- type binary;
- }
- }
- }
-
- grouping "vlan-match-fields" {
- container vlan-id {
- description "VLAN id.";
- presence "Match field is active and set";
-
- leaf vlan-id {
- mandatory true;
- type l2t:vlan-id;
- }
- leaf mask {
- type binary;
- }
- }
- leaf vlan-pcp {
- description "VLAN priority.";
- type l2t:vlan-pcp;
- }
-
-
- }
-
- grouping "ip-match-fields" {
- leaf ip-protocol {
- description "IP protocol.";
- type uint8; // TODO define IP protocol number
- }
-
- leaf ip-dscp {
- description "IP DSCP (6 bits in ToS field).";
- type inet:dscp; // TODO: Define DSCP type
- }
- leaf ip-ecn {
- description "IP ECN (2 bits in ToS field).";
- type uint8; // TODO define ECN
- }
- }
-
- grouping "ipv4-match-fields" {
- leaf ipv4-source {
- description "IPv4 source address.";
- type inet:ipv4-prefix;
- }
- leaf ipv4-destination {
- description "IPv4 destination address.";
- type inet:ipv4-prefix;
- }
- }
-
- grouping "ipv6-match-fields" {
- leaf ipv6-source {
- description "IPv6 source address.";
- type inet:ipv6-prefix;
- }
- leaf ipv6-destination {
- description "IPv6 destination address.";
- type inet:ipv6-prefix;
- }
- }
-
-
- grouping "udp-match-fields" {
- leaf udp-source-port {
- description "UDP source port.";
- type inet:port-number;
- }
- leaf udp-destination-port {
- description "UDP destination port.";
- type inet:port-number;
- }
- }
-
- grouping "tcp-match-fields" {
- leaf tcp-source-port {
- description "TCP source port.";
- type inet:port-number;
- }
- leaf tcp-destination-port {
- description "TCP destination port.";
- type inet:port-number;
- }
- }
-
- grouping "sctp-match-fields" {
- leaf sctp-source-port {
- description "SCTP source port.";
- type inet:port-number;
- }
- leaf sctp-destination-dst {
- description "SCTP destination port.";
- type inet:port-number;
- }
- }
-
- grouping "icmpv4-match-fields" {
- leaf icmpv4-type {
- description "ICMP type.";
- type uint8; // Define ICMP Type
- }
- description "ICMP code.";
- leaf icmpv4-code {
- type uint8; // Define ICMP Code
- }
- }
-
- grouping "arp-match-fields" {
- leaf arp-source-transport-address {
- description "ARP source IPv4 address.";
- type inet:ipv4-prefix;
- }
-
- leaf arp-target-transport-address {
- description "ARP target IPv4 address.";
- type inet:ipv4-prefix;
- }
- container arp-source-hardware-address {
- description "ARP source hardware address.";
- presence "Match field is active and set";
- leaf address {
- mandatory true;
- type yang:mac-address;
- }
- leaf mask {
- type binary;
- }
- }
- container arp-target-hardware-address {
- description "ARP target hardware address.";
- presence "Match field is active and set";
- leaf address {
- mandatory true;
- type yang:mac-address;
- }
- leaf mask {
- type binary;
- }
- }
- }
-
- grouping action {
- choice action {
- case output-action {
- leaf output-node-connector {
- type string;
- }
- }
-
- case controller-action {
- leaf max-length {
- type uint16 {
- range "0..65294";
- }
- }
- }
-
- case set-queue-action {
- leaf queue {
- type string; // TODO: define queues
- }
- }
-
- case pop-mpls-action {
- container pop-mpls {
- leaf ethernet-type {
- type uint16; // TODO: define ethertype type
- }
- }
- }
-
- case set-mpls-ttl-action {
- leaf mpls-ttl {
- type uint8;
- }
- }
-
- case set-nw-ttl-action {
- leaf nw-ttl {
- type uint8;
- }
- }
-
- case push-pbb-action {
-
- }
-
- case push-mpls-action {
-
- }
-
- case push-vlan-action {
-
- }
- }
- }
-
- grouping flow {
- leaf node {
- type inv:node-id;
- }
- container match {
- container "ethernet-match" {
- uses "ethernet-match-fields";
- }
- container "vlan-match" {
- uses "vlan-match-fields";
- }
- container "ip-match" {
- uses "ip-match-fields";
- }
- container "ipv4-match" {
- uses "ipv4-match-fields";
- }
- container "ipv6-match" {
- uses "ipv6-match-fields";
- }
- container "udp-match" {
- uses "udp-match-fields";
- }
- container "tcp-match" {
- uses "tcp-match-fields";
- }
- container "sctp-match" {
- uses "sctp-match-fields";
- }
- container "icmpv4-match" {
- uses "icmpv4-match-fields";
- }
- container "arp-match" {
- uses "arp-match-fields";
- }
- }
- list action {
- key "order";
- leaf order {
- type int32;
- }
- uses action;
- }
- }
-}
\ No newline at end of file