--- /dev/null
+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;
+ }
+}