BUG-2613: Migrating Openflow Specific models from controller project to openflowplugi...
[openflowplugin.git] / model / model-flow-service / src / main / yang / sal-flow.yang
diff --git a/model/model-flow-service/src/main/yang/sal-flow.yang b/model/model-flow-service/src/main/yang/sal-flow.yang
new file mode 100644 (file)
index 0000000..4cb1d08
--- /dev/null
@@ -0,0 +1,162 @@
+module sal-flow {
+    namespace "urn:opendaylight:flow:service";
+    prefix flow;
+
+    import yang-ext {prefix ext; revision-date "2013-07-09";}
+    import opendaylight-inventory {prefix inv;revision-date "2013-08-19";}
+    import opendaylight-flow-types {prefix types;revision-date "2013-10-26";}    
+    import opendaylight-group-types {prefix group-type;revision-date 2013-10-18;}
+    import opendaylight-meter-types {prefix meter-type;revision-date "2013-09-18";}
+    import flow-capable-transaction {prefix tr;}
+    import flow-errors {prefix error;}
+
+    revision "2013-08-19" {
+        description "Initial revision of flow service";
+    }
+
+    typedef flow-table-ref {
+        type instance-identifier;
+    }
+    
+    grouping node-flow-removed {
+        leaf node {
+            ext:context-reference "inv:node-context";
+            type inv:node-ref;
+        }
+        leaf flow-table {
+            type flow-table-ref;
+        }
+        uses types:flow-mod-removed;
+    }
+    
+    grouping node-flow {
+        uses "inv:node-context-ref";
+
+        leaf flow-table {
+            type flow-table-ref;
+        }
+        uses types:flow;
+    }
+
+    grouping base-node-error-notification {
+        leaf node {
+            ext:context-reference "inv:node-context";
+                type inv:node-ref;
+        }
+    }
+
+    grouping node-error-reference {
+        choice object-reference {
+            case flow-ref{
+                leaf flow-ref {
+                        type types:flow-ref;
+                }
+            }
+            case group-ref{
+                leaf group-ref {
+                    type group-type:group-ref;
+                }
+            }
+            case meter-ref{
+                leaf meter-ref {
+                    type meter-type:meter-ref;
+                }
+            }
+        }
+    }
+
+    /** Base configuration structure **/
+    grouping flow-update {
+        uses "inv:node-context-ref";
+
+        container original-flow {
+            uses types:flow;
+        }
+        container updated-flow {
+            uses types:flow;
+        }
+    }
+
+    rpc add-flow {
+        input {
+            uses tr:transaction-metadata;
+            leaf flow-ref {
+                type types:flow-ref;
+            }
+            uses node-flow;            
+        }
+        output {
+            uses tr:transaction-aware;
+        }
+    }
+
+    rpc remove-flow {
+        input {
+            uses tr:transaction-metadata;
+            leaf flow-ref {
+                type types:flow-ref;
+            }
+            uses node-flow;            
+        }
+        output {
+            uses tr:transaction-aware;
+        }
+    }
+
+    rpc update-flow {
+        input {
+            uses tr:transaction-metadata;
+            leaf flow-ref {
+                type types:flow-ref;
+            }
+            uses flow-update;           
+        }
+        output {
+            uses tr:transaction-aware;
+        }
+    }
+
+    notification flow-added {
+        uses tr:transaction-metadata;
+        leaf flow-ref {
+            type types:flow-ref;
+        }
+        uses node-flow;
+        uses tr:transaction-aware;
+    }
+
+    notification flow-updated {
+        uses tr:transaction-metadata;
+        leaf flow-ref {
+            type types:flow-ref;
+        }
+        uses node-flow;
+        uses tr:transaction-aware;        
+    }
+
+    notification flow-removed {
+        uses tr:transaction-metadata;
+        leaf flow-ref {
+            type types:flow-ref;
+        }
+        uses node-flow;
+        uses tr:transaction-aware;
+    }
+    
+    notification switch-flow-removed {
+        uses node-flow-removed;
+    }
+    
+    notification node-error-notification {
+        uses error:error-message;
+        uses tr:transaction-aware;
+        uses tr:transaction-metadata;
+        uses node-error-reference;
+        uses base-node-error-notification;
+    }
+    
+    notification node-experimenter-error-notification {
+        uses error:experimenter-error-message;
+        uses tr:transaction-aware;
+    }
+}