7845c43dfc44d74c99c3a1d3ec0bf36cbe78da3f
[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-type {
107                     description "Meter band type";
108                     type meter-band-type;
109                 }
110
111                 leaf experimenter-rate {
112                     description "Rate for remarking packets";
113                     type uint32;
114                 }
115                 
116                 leaf experimenter-burst-size {
117                     description "Size of bursts";
118                     type uint32;
119                 }
120                 
121                 leaf experimenter {
122                     description "Experimenter id";
123                     type uint32;
124                 }
125             }
126         }
127     }
128     
129     typedef meter-ref {
130         type instance-identifier;
131     }
132     
133     grouping meter {
134         
135         leaf flags {
136            description "Meter configuration flags";
137            type meter-flags;        
138         }
139         
140         leaf meter-id {
141             description "Meter instance";
142             type meter-id;
143         }       
144         
145         leaf barrier {
146             description "If true, barrier message is sent";
147             type boolean; 
148         }
149         
150         leaf meter-name {
151             description "Name of meter instance";
152             type string;
153         }
154         
155         leaf container-name {
156             description "Name of container";
157             type string; 
158         }
159         
160         container meter-band-headers {
161             list meter-band-header {
162                 key "band-id";
163                 leaf band-id {
164                     description "Meter band id";
165                     type band-id;
166                 }
167                 
168                 container meter-band-types {
169                     leaf flags {
170                         description "Meter band flags";
171                         type meter-band-type;
172                     }
173                 }
174             
175                 leaf band-rate {
176                     description "Rate for this band";
177                     type uint32;
178                 }
179         
180                 leaf band-burst-size {
181                     description "Size of bursts";
182                     type uint32;
183                 }
184                 uses band-type;
185             }
186         }
187     }
188     
189     grouping meter-statistics {
190             
191         leaf meter-id {
192             type meter-id;
193         }
194         
195         leaf flow-count {
196             type yang:counter32;
197         }
198         
199         leaf packet-in-count {
200             type yang:counter64;
201         } 
202         
203         leaf byte-in-count {
204             type yang:counter64;
205         }
206
207         container duration {
208             leaf second {
209                 type yang:counter32;
210             }
211             leaf nanosecond {
212                 type yang:counter32;
213             }
214         }
215         
216         container meter-band-stats {
217             list band-stat {
218                 key "band-id";
219                 leaf band-id {
220                     type band-id;
221                 }
222             
223                 leaf packet-band-count {
224                     type yang:counter64;
225                 } 
226         
227                 leaf byte-band-count {
228                     type yang:counter64;
229                 }
230             }       
231         }
232     }
233
234     grouping meter-features {
235                             
236         leaf max_meter {
237             type yang:counter32;
238         }
239            
240         leaf-list meter-band-supported {
241                 type identityref {
242                         base meter-band;
243                 }
244                 }
245         
246         leaf-list meter-capabilities-supported {
247                 type identityref {
248                         base meter-capability;
249                 }
250                 }
251         
252         leaf max_bands {
253             type uint8;
254         }
255         
256         leaf max_color {
257             type uint8;
258         }
259     }
260
261     grouping meter-stats-config-request {
262         list meter-stats {
263             key "meter-id";         
264             leaf meter-id {
265                 type meter-id;
266             }           
267         }
268     }
269     
270     grouping meter-statistics-reply {
271         list meter-stats {
272             key "meter-id";
273             uses meter-statistics;
274         }
275     }
276     
277     grouping meter-config-stats-reply {
278         list meter-config-stats {
279             key "meter-id";
280             uses meter;
281         } 
282     }
283     
284     grouping meter-features-reply {
285         uses meter-features;
286     }
287
288     container meter-message {
289         uses meter;
290         uses ofproto:ofHeader;
291
292         leaf command {
293             type oft:meter-mod-command;
294         }
295     }
296     
297 }