Moved MD SAL from sal/yang-prototype to md-sal
[controller.git] / opendaylight / md-sal / model / model-flow-base / src / main / yang / match-types.yang
diff --git a/opendaylight/md-sal/model/model-flow-base/src/main/yang/match-types.yang b/opendaylight/md-sal/model/model-flow-base/src/main/yang/match-types.yang
new file mode 100644 (file)
index 0000000..757686c
--- /dev/null
@@ -0,0 +1,267 @@
+module opendaylight-match-types {
+    namespace "urn:opendaylight:model:match:types";
+    prefix "match";
+
+    import ietf-inet-types {prefix inet;}
+    import ietf-yang-types {prefix yang;}
+    import opendaylight-l2-types {prefix l2t;}
+
+    revision "2013-08-19" {
+        description "Initial revision of flow service";
+    }
+
+    grouping "mac-address-filter" {
+        leaf address {
+            mandatory true;
+            type yang:mac-address;
+        }
+        leaf mask {
+            type binary;
+        }
+    }
+
+     /** Match Groupings **/
+    grouping "ethernet-match-fields" {
+        container ethernet-source {
+            description "Ethernet source address.";
+            presence "Match field is active and set";
+            uses mac-address-filter;
+        }
+        container ethernet-destination {
+            description "Ethernet destination address.";
+            presence "Match field is active and set";
+            uses mac-address-filter;
+        }
+        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; 
+        }
+
+        leaf ip-dscp {
+            description "IP DSCP (6 bits in ToS field).";
+            type inet:dscp; 
+        }
+        leaf ip-ecn {
+            description "IP ECN (2 bits in ToS field).";
+            type uint8; 
+        }
+    }
+
+    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-port {
+            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";
+        uses mac-address-filter;
+        }
+        container arp-target-hardware-address {
+            description "ARP target hardware address.";
+            presence "Match field is active and set";
+        uses mac-address-filter;
+        }
+    }
+
+    grouping action {
+        choice action {
+            case output-action {
+                leaf-list 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 match {
+        container "ethernet-match" {
+            uses "ethernet-match-fields";
+        }
+        container "vlan-match" {
+            uses "vlan-match-fields";
+        }
+        container "ip-match" {
+            uses "ip-match-fields";
+        }
+        
+        choice layer-3-match {
+            case "ipv4-match" {
+                uses "ipv4-match-fields";
+            }
+            case "ipv6-match" {
+                uses "ipv6-match-fields";
+            }
+            case "arp-match" {
+                uses "arp-match-fields";
+            }
+        }
+        
+        choice layer-4-match {
+            case "udp-match" {
+                uses "udp-match-fields";
+            }
+            case "tcp-match" {
+                uses "tcp-match-fields";
+            }
+            case "sctp-match" {
+                uses "sctp-match-fields";
+            }
+        }
+        container "icmpv4-match" {
+            uses "icmpv4-match-fields";
+        }
+    }
+}
\ No newline at end of file