Merge "Changed model versions to dependencies"
[controller.git] / opendaylight / md-sal / model / model-flow-service / src / main / yang / sal-flow.yang
1 module sal-flow {
2     namespace "urn:opendaylight:flow:service";
3     prefix flow;
4
5     import yang-ext {prefix ext; revision-date "2013-07-09";}
6     import opendaylight-inventory {prefix inv;revision-date "2013-08-19";}
7     import opendaylight-flow-types {prefix types;revision-date "2013-10-26";}    
8     import opendaylight-group-types {prefix group-type;revision-date 2013-10-18;}
9     import opendaylight-meter-types {prefix meter-type;revision-date "2013-09-18";}
10     import flow-capable-transaction {prefix tr;}
11     import flow-errors {prefix error;}
12
13     revision "2013-08-19" {
14         description "Initial revision of flow service";
15     }
16
17     typedef flow-table-ref {
18         type instance-identifier;
19     }
20     
21     grouping node-flow-removed {
22         leaf node {
23             ext:context-reference "inv:node-context";
24             type inv:node-ref;
25         }
26         leaf flow-table {
27             type flow-table-ref;
28         }
29         uses types:flow-mod-removed;
30     }
31     
32     grouping node-flow {
33         uses "inv:node-context-ref";
34
35         leaf flow-table {
36             type flow-table-ref;
37         }
38         uses types:flow;
39     }
40
41     /** Base configuration structure **/
42     grouping flow-update {
43         uses "inv:node-context-ref";
44
45         container original-flow {
46             uses types:flow;
47         }
48         container updated-flow {
49             uses types:flow;
50         }
51     }
52
53     rpc add-flow {
54         input {
55             uses tr:transaction-metadata;
56             leaf flow-ref {
57                 type types:flow-ref;
58             }
59             uses node-flow;            
60         }
61         output {
62             uses tr:transaction-aware;
63         }
64     }
65
66     rpc remove-flow {
67         input {
68             uses tr:transaction-metadata;
69             leaf flow-ref {
70                 type types:flow-ref;
71             }
72             uses node-flow;            
73         }
74         output {
75             uses tr:transaction-aware;
76         }
77     }
78
79     rpc update-flow {
80         input {
81             uses tr:transaction-metadata;
82             leaf flow-ref {
83                 type types:flow-ref;
84             }
85             uses flow-update;           
86         }
87         output {
88             uses tr:transaction-aware;
89         }
90     }
91
92     notification flow-added {
93         uses tr:transaction-metadata;
94         leaf flow-ref {
95             type types:flow-ref;
96         }
97         uses node-flow;
98         uses tr:transaction-aware;
99     }
100
101     notification flow-updated {
102         uses tr:transaction-metadata;
103         leaf flow-ref {
104             type types:flow-ref;
105         }
106         uses node-flow;
107         uses tr:transaction-aware;        
108     }
109
110     notification flow-removed {
111         uses tr:transaction-metadata;
112         leaf flow-ref {
113             type types:flow-ref;
114         }
115         uses node-flow;
116         uses tr:transaction-aware;
117     }
118     
119     notification switch-flow-removed {
120         uses node-flow-removed;
121     }
122     
123     notification node-error-notification {
124         uses error:error-message;
125         uses tr:transaction-aware;
126         uses tr:transaction-metadata;
127         choice object-reference {
128         case flow-ref{
129                    leaf flow-ref {
130             type types:flow-ref;
131          }
132        }
133         case group-ref{
134                    leaf group-ref {
135             type group-type:group-ref;
136          }
137        }
138         case meter-ref{
139                    leaf meter-ref {
140             type meter-type:meter-ref;
141          }
142        }
143      }
144         leaf node {
145             ext:context-reference "inv:node-context";
146             type inv:node-ref;
147         }
148         
149     }
150     
151     notification node-experimenter-error-notification {
152         uses error:experimenter-error-message;
153         uses tr:transaction-aware;
154     }
155 }