4cb1d08917a5040e06397d334df383cb99cac35e
[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     grouping base-node-error-notification {
42         leaf node {
43             ext:context-reference "inv:node-context";
44                 type inv:node-ref;
45         }
46     }
47
48     grouping node-error-reference {
49         choice object-reference {
50             case flow-ref{
51                 leaf flow-ref {
52                         type types:flow-ref;
53                 }
54             }
55             case group-ref{
56                 leaf group-ref {
57                     type group-type:group-ref;
58                 }
59             }
60             case meter-ref{
61                 leaf meter-ref {
62                     type meter-type:meter-ref;
63                 }
64             }
65         }
66     }
67
68     /** Base configuration structure **/
69     grouping flow-update {
70         uses "inv:node-context-ref";
71
72         container original-flow {
73             uses types:flow;
74         }
75         container updated-flow {
76             uses types:flow;
77         }
78     }
79
80     rpc add-flow {
81         input {
82             uses tr:transaction-metadata;
83             leaf flow-ref {
84                 type types:flow-ref;
85             }
86             uses node-flow;            
87         }
88         output {
89             uses tr:transaction-aware;
90         }
91     }
92
93     rpc remove-flow {
94         input {
95             uses tr:transaction-metadata;
96             leaf flow-ref {
97                 type types:flow-ref;
98             }
99             uses node-flow;            
100         }
101         output {
102             uses tr:transaction-aware;
103         }
104     }
105
106     rpc update-flow {
107         input {
108             uses tr:transaction-metadata;
109             leaf flow-ref {
110                 type types:flow-ref;
111             }
112             uses flow-update;           
113         }
114         output {
115             uses tr:transaction-aware;
116         }
117     }
118
119     notification flow-added {
120         uses tr:transaction-metadata;
121         leaf flow-ref {
122             type types:flow-ref;
123         }
124         uses node-flow;
125         uses tr:transaction-aware;
126     }
127
128     notification flow-updated {
129         uses tr:transaction-metadata;
130         leaf flow-ref {
131             type types:flow-ref;
132         }
133         uses node-flow;
134         uses tr:transaction-aware;        
135     }
136
137     notification flow-removed {
138         uses tr:transaction-metadata;
139         leaf flow-ref {
140             type types:flow-ref;
141         }
142         uses node-flow;
143         uses tr:transaction-aware;
144     }
145     
146     notification switch-flow-removed {
147         uses node-flow-removed;
148     }
149     
150     notification node-error-notification {
151         uses error:error-message;
152         uses tr:transaction-aware;
153         uses tr:transaction-metadata;
154         uses node-error-reference;
155         uses base-node-error-notification;
156     }
157     
158     notification node-experimenter-error-notification {
159         uses error:experimenter-error-message;
160         uses tr:transaction-aware;
161     }
162 }