Updated SAL Flow Models 59/1059/2
authorTony Tkacik <ttkacik@cisco.com>
Fri, 30 Aug 2013 01:25:08 +0000 (18:25 -0700)
committerGiovanni Meo <gmeo@cisco.com>
Wed, 4 Sep 2013 12:12:29 +0000 (14:12 +0200)
Change-Id: I2770e9b412b641aa93eb206e52b677f79d2038c7
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
opendaylight/sal/yang-prototype/sal/model/model-flow-base/pom.xml [moved from opendaylight/sal/yang-prototype/sal/model/model-flow/pom.xml with 79% similarity]
opendaylight/sal/yang-prototype/sal/model/model-flow-base/src/main/yang/opendaylight-flow-base.yang [moved from opendaylight/sal/yang-prototype/sal/model/model-flow/src/main/yang/opendaylight-flow.yang with 55% similarity]
opendaylight/sal/yang-prototype/sal/model/model-flow-service/pom.xml [new file with mode: 0644]
opendaylight/sal/yang-prototype/sal/model/model-flow-service/src/main/yang/opendaylight-flow-config.yang [new file with mode: 0644]
opendaylight/sal/yang-prototype/sal/model/model-flow-service/src/main/yang/opendaylight-flow-service.yang [new file with mode: 0644]
opendaylight/sal/yang-prototype/sal/model/model-flow-statistics/pom.xml
opendaylight/sal/yang-prototype/sal/model/model-flow-statistics/src/main/yang/opendaylight-flow-statistics.yang
opendaylight/sal/yang-prototype/sal/model/model-inventory/src/main/yang/opendaylight-inventory.yang
opendaylight/sal/yang-prototype/sal/model/pom.xml

similarity index 79%
rename from opendaylight/sal/yang-prototype/sal/model/model-flow/pom.xml
rename to opendaylight/sal/yang-prototype/sal/model/model-flow-base/pom.xml
index 054ae4b7b79145421f1a7519d7e23e0534aa3958..6eaaebada598c3fada00c18528adffc9468d309a 100644 (file)
@@ -13,7 +13,7 @@
     </scm>
 
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>model-flow</artifactId>
+    <artifactId>model-flow-base</artifactId>
 
     <dependencies>
         <dependency>
             <artifactId>model-inventory</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools.model</groupId>
+            <artifactId>opendaylight-l2-types</artifactId>
+            <version>2013.08.27-SNAPSHOT</version>
+        </dependency>
     </dependencies>
     <packaging>bundle</packaging>
 </project>
similarity index 55%
rename from opendaylight/sal/yang-prototype/sal/model/model-flow/src/main/yang/opendaylight-flow.yang
rename to opendaylight/sal/yang-prototype/sal/model/model-flow-base/src/main/yang/opendaylight-flow-base.yang
index 1f94ef98eebfaaee57a8e66afac01f7e7d4190e6..443d82f2e42bd13083ace2889b25574d46246fd1 100644 (file)
@@ -1,46 +1,24 @@
-module opendaylight-flow {
-    namespace "urn:opendaylight:flow:service";
-    prefix flow;
+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";
     }
 
-    /** Base structure **/
-    container flows {
-        list flow {
-            leaf node {
-                type inv:node-id;
-            }
-            container match {
-                // Match is empty
-                leaf input-node-connector {
-                    type inv:node-connector-id; //
-                }
-            }
-            list action {
-                key id;
-                leaf id {
-                    type string;
-                }
-                choice action {
-                
-                }
-            }
-        }
-    }
-
-    /** Matches **/
-    augment "/flows/flow/match" {
-        ext:augment-identifier "ethernet-match";
+     /** Match Groupings **/
+    grouping "ethernet-match-fields" {
         container ethernet-source {
-            description "Ethernet source address.";
+            //description "Ethernet source address.";
+            //presence "Match field is active and set";
             leaf address {
+                mandatory true;
                 type yang:mac-address;
             }
             leaf mask {
@@ -49,14 +27,19 @@ module opendaylight-flow {
         }
         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 {
-                type uint16; // Needs to define that as general model
+                mandatory true;
+                type l2t:ether-type; // Needs to define that as general model
             }
             leaf mask {
                 type binary;
@@ -64,13 +47,14 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "vlan-match";
-
+    grouping "vlan-match-fields" {
         container vlan-id {
             description "VLAN id.";
+            presence "Match field is active and set";
+            
             leaf vlan-id {
-                type uint16; // TODO: Define proper vlan id type.
+                mandatory true;
+                type l2t:vlan-id; 
             }
             leaf mask {
                 type binary;
@@ -78,15 +62,13 @@ module opendaylight-flow {
         }
         leaf vlan-pcp {
             description "VLAN priority.";
-            type uint8; // TODO: Define PCP type
+            type l2t:vlan-pcp;
         }
         
 
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "ip-match";
-
+    grouping "ip-match-fields" {
         leaf ip-protocol {
                 description "IP protocol.";
                 type uint8; // TODO define IP protocol number
@@ -102,8 +84,7 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "ipv4-match";
+    grouping "ipv4-match-fields" {
         leaf ipv4-source {
             description "IPv4 source address.";
             type inet:ipv4-prefix;
@@ -114,8 +95,7 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "ipv6-match";
+    grouping "ipv6-match-fields" {
         leaf ipv6-source {
             description "IPv6 source address.";
             type inet:ipv6-prefix;
@@ -127,9 +107,7 @@ module opendaylight-flow {
     }
 
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "udp-match";
-        
+    grouping "udp-match-fields" {
         leaf udp-source-port {
             description "UDP source port.";
             type inet:port-number;
@@ -140,8 +118,7 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "tcp-match";
+    grouping "tcp-match-fields" {
         leaf tcp-source-port {
             description "TCP source port.";
             type inet:port-number;
@@ -152,8 +129,7 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "sctp-match";
+    grouping "sctp-match-fields" {
         leaf sctp-source-port {
             description "SCTP source port.";
             type inet:port-number;
@@ -164,8 +140,7 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "icmpv4-match";
+    grouping "icmpv4-match-fields" {
         leaf icmpv4-type {
         description "ICMP type.";
             type uint8; // Define ICMP Type
@@ -176,9 +151,7 @@ module opendaylight-flow {
         }
     }
 
-    augment "/flows/flow/match" {
-        ext:augment-identifier "arp-match";
-            
+    grouping "arp-match-fields" {     
         leaf arp-source-transport-address {
             description "ARP source IPv4 address.";
             type inet:ipv4-prefix;
@@ -190,7 +163,9 @@ module opendaylight-flow {
         }
         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 {
@@ -199,7 +174,9 @@ module opendaylight-flow {
         }
         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 {
@@ -208,59 +185,104 @@ module opendaylight-flow {
         }
     }
 
-    /** Actions **/
-    augment "/flows/flow/action/action" {
-        case output-action {
-            leaf output-node-connector {
-                type string;
+    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 controller-action {
+                leaf max-length {
+                    type uint16 {
+                        range "0..65294";
+                    }
                 }
             }
-        }
 
-        case set-queue-action {
-            leaf queue {
-                type string; // TODO: define queues
+            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 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-mpls-ttl-action {
+                leaf mpls-ttl {
+                    type uint8;
+                }
             }
-        }
 
-        case set-nw-ttl-action {
-            leaf nw-ttl {
-                type uint8;
+            case set-nw-ttl-action {
+                leaf nw-ttl {
+                    type uint8;
+                }
             }
-        }
 
-        case push-pbb-action {
+            case push-pbb-action {
 
-        }
+            }
 
-        case push-mpls-action {
+            case push-mpls-action {
 
-        }
+            }
 
-        case push-vlan-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
diff --git a/opendaylight/sal/yang-prototype/sal/model/model-flow-service/pom.xml b/opendaylight/sal/yang-prototype/sal/model/model-flow-service/pom.xml
new file mode 100644 (file)
index 0000000..18b338b
--- /dev/null
@@ -0,0 +1,31 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <artifactId>model-parent</artifactId>
+        <groupId>org.opendaylight.controller.model</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>model-flow-service</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>model-flow-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>model-inventory</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools.model</groupId>
+            <artifactId>opendaylight-l2-types</artifactId>
+            <version>2013.08.27-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+    <packaging>bundle</packaging>
+</project>
\ No newline at end of file
diff --git a/opendaylight/sal/yang-prototype/sal/model/model-flow-service/src/main/yang/opendaylight-flow-config.yang b/opendaylight/sal/yang-prototype/sal/model/model-flow-service/src/main/yang/opendaylight-flow-config.yang
new file mode 100644 (file)
index 0000000..a4ecf73
--- /dev/null
@@ -0,0 +1,21 @@
+module opendaylight-flow-config {
+    namespace "urn:opendaylight:flow:config";
+    prefix flow;
+
+    import yang-ext {prefix ext;}
+    import opendaylight-inventory {prefix inv;}
+    import opendaylight-flow-base {prefix flowbase;}
+
+    revision "2013-08-19" {
+        description "Initial revision of flow service";
+    }
+
+    /** Base configuration structure 
+    container flows {
+        list flow {
+            uses flowbase:flow;
+        }
+    }
+
+    **/
+}
\ No newline at end of file
diff --git a/opendaylight/sal/yang-prototype/sal/model/model-flow-service/src/main/yang/opendaylight-flow-service.yang b/opendaylight/sal/yang-prototype/sal/model/model-flow-service/src/main/yang/opendaylight-flow-service.yang
new file mode 100644 (file)
index 0000000..0f01de5
--- /dev/null
@@ -0,0 +1,56 @@
+module opendaylight-flow-service {
+    namespace "urn:opendaylight:flow:service";
+    prefix flow;
+
+    import yang-ext {prefix ext;}
+    import opendaylight-inventory {prefix inv;}
+    import opendaylight-flow-base {prefix flowbase;}
+
+    revision "2013-08-19" {
+        description "Initial revision of flow service";
+    }
+
+    /** Base configuration structure **/
+    
+
+    grouping flow-update {
+        container original-flow {
+            uses flowbase:flow;
+        }
+        container updated-flow {
+            uses flowbase:flow;
+        }
+    }
+
+    rpc add-flow {
+        input {
+            uses flowbase:flow;
+        }
+    }
+
+    rpc remove-flow {
+        input {
+            uses flowbase:flow;
+        }
+    }
+
+    rpc update-flow {
+        input {
+            uses flow-update;
+        }
+    }
+
+    notification flow-added {
+        uses flowbase:flow;
+    }
+
+    notification flow-updated {
+        input {
+            uses flow-update;
+        }
+    }
+
+    notification flow-removed {
+        uses flowbase:flow;
+    }
+}
\ No newline at end of file
index 10534fd524bdecdee67ca7fb3fa3c8b663692d8e..aa335a807c6ade9579a4d5c1e97d7f44afcbec8d 100644 (file)
@@ -23,7 +23,7 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>model-flow</artifactId>
+            <artifactId>model-flow-service</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
index 36d8bf2a9934c6b5681a9d59e2fb6664c01ebe10..3c1bb70e6886a5b27d16e915f45288abf5267099 100644 (file)
@@ -5,13 +5,14 @@ module opendaylight-flow-statistics {
     import yang-ext {prefix ext;}
     import ietf-inet-types {prefix inet;}
     import ietf-yang-types {prefix yang;}
-    import opendaylight-flow {prefix flow;}
+    import opendaylight-flow-base {prefix flow;}
     import opendaylight-inventory {prefix inv;}
 
     revision "2013-08-19" {
         description "Initial revision of flow service";
     }
 
+    /*
     augment "/flow:flows/flow:flow" {
         ext:augment-identifier "flow-statistics";
 
@@ -32,6 +33,7 @@ module opendaylight-flow-statistics {
             }
         }
     }
+    */
 
     augment "/inv:nodes/inv:node/inv:node-connector" {
         ext:augment-identifier "node-connector-statistics";
index 9f2590b181834ddca0b510e9d5df508c3b2f6100..fa9de4afa0f04034a6ae850842ddd3864bf0eada 100644 (file)
@@ -27,7 +27,10 @@ module opendaylight-inventory {
                 type node-id;
             }
             list node-connector {
-                type node-connector-id;
+                key "id";
+                leaf id {
+                    type node-connector-id;
+                }
             }
         }
     }
index 35279be81eb91258c6c49719098fc49992547ef8..2874122ac1613d7734b7b71291dad7b6f24af924 100644 (file)
@@ -26,7 +26,8 @@
 
     <modules>
         <module>model-inventory</module>
-        <module>model-flow</module>
+        <module>model-flow-base</module>
+        <module>model-flow-service</module>
         <module>model-flow-statistics</module>
         <!-- <module>model-topology-bgp</module> -->
     </modules>