Create YANG builders for all relevant model types
[openflowplugin.git] / model / model-flow-base / src / main / yang / opendaylight-meter-types.yang
1 module opendaylight-meter-types {
2     namespace "urn:opendaylight:meter:types";
3     prefix meter;
4
5     import ietf-yang-types {prefix yang; revision-date "2013-07-15";}
6     import openflow-protocol { prefix ofproto; revision-date "2013-07-31"; }
7     import openflow-types { prefix oft; revision-date "2013-07-31"; }
8
9
10     revision "2013-09-18" {
11         description "Initial revision of meter service";
12     }
13
14     typedef meter-id {
15         type uint32;
16     }
17     typedef band-id {
18         type uint32;
19     }
20     
21     typedef meter-flags {        
22         type bits {
23             bit meter-kbps;
24             bit meter-pktps;
25             bit meter-burst;
26             bit meter-stats;
27         }        
28     }
29     
30     identity meter-capability {
31         description "Base identity for all the supported meter capabilities/flags";
32     }
33     identity meter-kbps {
34         base meter-capability;
35         description "Rate value in kb/s (kilo-bit per second)";
36     } 
37     identity meter-pktps {
38         base meter-capability;
39         description "Rate value in packet/sec.";
40     } 
41     identity meter-burst {
42         base meter-capability;
43         description "Do burst size.";
44     } 
45     identity meter-stats {
46         base meter-capability;
47         description "Collect statistics.";
48     } 
49     
50     typedef meter-band-type {
51         type bits {
52             bit ofpmbt-drop;
53             bit ofpmbt-dscp-remark;
54             bit ofpmbt-experimenter;               
55         }
56     }
57     
58     identity meter-band {
59         description "Base identity for all the band type available";
60     }
61     identity meter-band-drop {
62         base meter-band;
63         description "Drop packet";
64     }
65     identity meter-band-dscp-remark {
66         base meter-band;
67         description "Remark DSCP in the IP header";
68     }
69     identity meter-band-experimenter {
70         base meter-band;
71         description "Experimenter meter band";
72     }
73
74     grouping band-type {
75         choice band-type {
76             case drop {
77                 leaf drop-rate {
78                     description "Rate for dropping packets";
79                     type uint32;
80                 }
81                 
82                 leaf drop-burst-size {
83                     description "Size of bursts";
84                     type uint32;
85                 }
86             }
87
88             case dscp-remark {
89                 leaf dscp-remark-rate {
90                     description "Rate for remarking packets";
91                     type uint32;
92                 }
93                 
94                 leaf dscp-remark-burst-size {
95                     description "Size of bursts";
96                     type uint32;
97                 }
98                 
99                 leaf prec_level {
100                     description "Number of drop precedence level to add";
101                     type uint8;
102                 }
103             }
104             
105             case experimenter {
106                 leaf experimenter-rate {
107                     description "Rate for remarking packets";
108                     type uint32;
109                 }
110                 
111                 leaf experimenter-burst-size {
112                     description "Size of bursts";
113                     type uint32;
114                 }
115                 
116                 leaf experimenter {
117                     description "Experimenter id";
118                     type uint32;
119                 }
120             }
121         }
122     }
123     
124     typedef meter-ref {
125         type instance-identifier;
126     }
127     
128     grouping meter {
129         
130         leaf flags {
131            description "Meter configuration flags";
132            type meter-flags;        
133         }
134         
135         leaf meter-id {
136             description "Meter instance";
137             type meter-id;
138         }       
139         
140         leaf barrier {
141             description "If true, barrier message is sent";
142             type boolean; 
143         }
144         
145         leaf meter-name {
146             description "Name of meter instance";
147             type string;
148         }
149         
150         leaf container-name {
151             description "Name of container";
152             type string; 
153         }
154         
155         container meter-band-headers {
156             list meter-band-header {
157                 key "band-id";
158                 leaf band-id {
159                     description "Meter band id";
160                     type band-id;
161                 }
162                 
163                 container meter-band-types {
164                     leaf flags {
165                         description "Meter band flags";
166                         type meter-band-type;
167                     }
168                 }
169             
170                 leaf band-rate {
171                     description "Rate for this band";
172                     type uint32;
173                 }
174         
175                 leaf band-burst-size {
176                     description "Size of bursts";
177                     type uint32;
178                 }
179                 uses band-type;
180             }
181         }
182     }
183     
184     grouping meter-statistics {
185             
186         leaf meter-id {
187             type meter-id;
188         }
189         
190         leaf flow-count {
191             type yang:counter32;
192         }
193         
194         leaf packet-in-count {
195             type yang:counter64;
196         } 
197         
198         leaf byte-in-count {
199             type yang:counter64;
200         }
201
202         container duration {
203             leaf second {
204                 type yang:counter32;
205             }
206             leaf nanosecond {
207                 type yang:counter32;
208             }
209         }
210         
211         container meter-band-stats {
212             list band-stat {
213                 key "band-id";
214                 leaf band-id {
215                     type band-id;
216                 }
217             
218                 leaf packet-band-count {
219                     type yang:counter64;
220                 } 
221         
222                 leaf byte-band-count {
223                     type yang:counter64;
224                 }
225             }       
226         }
227     }
228
229     grouping meter-features {
230                             
231         leaf max_meter {
232             type yang:counter32;
233         }
234            
235         leaf-list meter-band-supported {
236                 type identityref {
237                         base meter-band;
238                 }
239                 }
240         
241         leaf-list meter-capabilities-supported {
242                 type identityref {
243                         base meter-capability;
244                 }
245                 }
246         
247         leaf max_bands {
248             type uint8;
249         }
250         
251         leaf max_color {
252             type uint8;
253         }
254     }
255
256     grouping meter-stats-config-request {
257         list meter-stats {
258             key "meter-id";         
259             leaf meter-id {
260                 type meter-id;
261             }           
262         }
263     }
264     
265     grouping meter-statistics-reply {
266         list meter-stats {
267             key "meter-id";
268             uses meter-statistics;
269         }
270     }
271     
272     grouping meter-config-stats-reply {
273         list meter-config-stats {
274             key "meter-id";
275             uses meter;
276         } 
277     }
278     
279     grouping meter-features-reply {
280         uses meter-features;
281     }
282
283     container meter-message {
284         uses meter;
285         uses ofproto:ofHeader;
286
287         leaf command {
288             type oft:meter-mod-command;
289         }
290     }
291     
292 }