Merge "Added couple of codec classes for table feature property,group feature and...
[openflowjava.git] / openflow-protocol-api / src / main / yang / openflow-protocol.yang
1 module openflow-protocol {
2     namespace "urn:opendaylight:openflow:protocol";
3     prefix "ofproto";
4
5
6     import ietf-inet-types {prefix inet;}
7     import ietf-yang-types {prefix yang;}
8     
9     import openflow-types {prefix oft;}
10     import openflow-extensible-match { prefix oxm;}
11     import openflow-instruction { prefix ofinstruction;}
12     import openflow-action {prefix ofaction;}
13
14
15
16     revision "2013-07-31" {
17         description "Initial model";
18     }
19
20     // Generic Structures
21
22         grouping port {
23             reference "ofp_port";
24             leaf port_no { 
25                 reference "ofp_port.port_no"; 
26                 type uint32;
27             }
28             leaf hw_addr { 
29                 reference "ofp_port.hw_addr"; 
30                 type yang:mac-address;
31             }
32             leaf name { 
33                 reference "ofp_port.name"; 
34                 type string;
35             }
36             leaf config { 
37                 reference "ofp_port.config"; 
38                 type oft:port-config;
39             }
40             leaf state { 
41                 reference "ofp_port.state"; 
42                 type oft:port-state;
43             }
44             leaf current-features { 
45                 description "Current features.";
46                 reference "ofp_port.curr"; 
47                 type oft:port-features; 
48             }
49             leaf advertised-features { 
50                 description "Features being advertised by the port.";
51                 reference "ofp_port.advertised"; 
52                 type oft:port-features; 
53             }
54             leaf supported-features { 
55                 description "Features supported by the port.";
56                 reference "ofp_port.supported"; 
57                 type oft:port-features; 
58             }
59             leaf peer-features { 
60                 description "Features advertised by peer.";
61                 reference "ofp_port.peer"; 
62                 type oft:port-features; 
63             }
64             leaf curr_speed { 
65                 description "Current port bitrate in kbps.";
66                 reference "ofp_port.curr_speed"; 
67                 type uint32; 
68                 units "kbps";
69             }
70             leaf max_speed { 
71                 description "Max port bitrate in kbps";
72                 reference "ofp_port.max_speed"; 
73                 type uint32;
74                 units "kbps"; 
75             }
76         }
77
78     // TODO: ofp_packat_queue
79
80     // # MESSAGE Structures
81         /* Immutable messages. */
82             grouping hello {
83                 reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
84                 
85                 /* Symmetric message */
86             }
87             grouping error {
88                 reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
89                 
90                 /* Symmetric message */
91             }
92             grouping echo_request {
93                 reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
94                 
95                 /* Symmetric message */
96             }
97             grouping echo_reply {
98                 reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
99                 
100                 /* Symmetric message */
101             }
102             grouping experimenter {
103                 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
104                 
105                 /* Symmetric message */
106             }
107         /* Switch configuration messages. */
108             grouping features_request {
109                 reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
110                 
111                 /* Controller/switch message */
112             }
113             grouping features_reply {
114                 reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
115                 
116                 /* Controller/switch message */
117             }
118             grouping get_config_request {
119                 reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
120                 
121                 /* Controller/switch message */
122             }
123             grouping get_config_reply {
124                 reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
125                 
126                 /* Controller/switch message */
127             }
128             grouping set_config {
129                 reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
130                 
131                 /* Controller/switch message */
132             }
133         /* Asynchronous messages. */
134             grouping packet_in {
135                 reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
136                 
137              /* Async message */
138             }
139             grouping flow_removed {
140                 reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
141                 
142                 /* Async message */
143             } 
144             grouping port_status {
145                 reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
146                 
147             } /* Async message */
148         /* Controller command messages. */
149             grouping packet_out {
150                 reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
151                 
152                 /* Controller/switch message */
153             } 
154             grouping flow_mod {
155                 reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
156                 
157                 /* Controller/switch message */
158             } 
159             grouping group_mod {
160                 reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
161                 
162                 /* Controller/switch message */
163             } 
164             grouping port_mod {
165                 reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
166                 
167             } /* Controller/switch message */
168             grouping table_mod {
169                 reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
170                 
171             } /* Controller/switch message */
172         /* Multipart messages. */
173             grouping multipart_request {
174                 reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
175                 
176             } /* Controller/switch message */
177             grouping multipart_reply {
178                 reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
179                 
180             } /* Controller/switch message */
181             /* Barrier messages. */
182             grouping barrier_request {
183                 reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
184                 
185             } /* Controller/switch message */
186             grouping barrier_reply {
187                 reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
188                 
189             } /* Controller/switch message */
190         /* Queue Configuration messages. */
191             grouping queue_get_config_request {
192                 reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
193                 
194             } /* Controller/switch message */
195             grouping queue_get_config_reply {
196                 reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
197                 
198             } /* Controller/switch message */
199             /* Controller role change request messages. */
200             grouping role_request {
201                 reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
202                 
203             } /* Controller/switch message */
204             grouping role_reply {
205                 reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
206                 
207             } /* Controller/switch message */
208             /* Asynchronous message configuration. */
209             grouping get_async_request {
210                 reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
211                 
212             } /* Controller/switch message */
213             grouping get_async_reply {
214                 reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
215                 
216             } /* Controller/switch message */
217             grouping set_async {
218                 reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
219                 
220             } /* Controller/switch message */
221             /* Meters and rate limiters configuration messages. */
222             grouping meter_mod {
223                 reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
224                 
225             } /* Controller/switch message */
226
227
228
229                 /* Immutable messages. */
230             notification hello {
231                 uses hello;
232                 reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
233                 
234                 /* Symmetric message */
235             }
236             notification error {
237                 uses error;
238                 reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
239                 
240                 /* Symmetric message */
241             }
242             notification echo_request {
243                 uses echo_request;
244                 reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
245                 
246                 /* Symmetric message */
247             }
248             notification echo_reply {
249                 uses echo_reply;
250                 reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
251                 
252                 /* Symmetric message */
253             }
254             notification experimenter {
255                 uses experimenter;
256                 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
257                 
258                 /* Symmetric message */
259             }
260             /* Switch configuration messages. */
261             rpc get_features {
262                 input {
263                     uses features_request;
264                     reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
265                 }
266                 output {
267                     uses features_reply;
268                     reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
269                 }
270             }
271
272
273             notification get_config {
274                 input {
275                     uses get_config_request;
276                     reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
277                 }
278                 output {
279                     uses get_config_reply;
280                     reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
281                 }
282             }
283
284             notification set_config {
285                 input {
286                     uses set_config;
287                     reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
288                 }
289                 /* Controller/switch message */
290             }
291
292     // # Notification and RPCs
293         
294
295         /* Switch configuration messages. */
296             rpc get_features {
297                 reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
298                 input {
299                     uses features_request;
300                 }
301                 /* Controller/switch message */
302                 output {
303                     uses features_reply;
304                 }
305             }
306             
307             rpc get_config {
308                 reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
309                 input {
310                     uses get_config_request;
311                 }
312                 output {
313                     uses get_config_reply;
314                 }
315                 /* Controller/switch message */
316             }
317             
318             grouping set_config {
319                 reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
320                 input {
321                     uses set_config;
322                 }   
323                 /* Controller/switch message */
324             }
325         /* Asynchronous messages. */
326             notification packet_in {
327                 uses packet_in;
328                 reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
329                 
330              /* Async message */
331             }
332             notification flow_removed {
333                 uses flow_removed;
334                 reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
335                 
336                 /* Async message */
337             } 
338             notification port_status {
339                 uses port_status;
340                 reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
341                 
342             } /* Async message */
343
344         /* Controller command messages. */
345             rpc packet_out {
346                 input {
347                     uses packet_out;
348                     reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
349                 }
350                 /* Controller/switch message */
351             } 
352             rpc flow_mod {
353                 input {
354                     uses flow_mod;
355                     reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
356                 }
357                 /* Controller/switch message */
358             } 
359             rpc group_mod {
360                 input {
361                     uses group_mod;
362                     reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
363                 }
364                 /* Controller/switch message */
365             } 
366             rpc port_mod {
367                 input {
368                     uses port_mod;
369                     reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
370                 }
371             } /* Controller/switch message */
372             
373             rpc table_mod {
374                 input {
375                     uses table_mod;
376                     reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
377                 }
378             } /* Controller/switch message */
379
380         /* Multipart messages. */
381             //FIXME: Arent this wire protocol specific?
382
383             notification multipart_request {
384                 uses multipart_request;
385                 reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
386                 
387             } /* Controller/switch message */
388             notification multipart_reply {
389                 uses multipart_reply;
390                 reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
391                 
392             } /* Controller/switch message */
393             
394
395             /* Barrier messages. */
396             rpc barrier {
397                 input {
398                     uses barrier_request;
399                     reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
400                 }
401                 output {
402                     uses barrier_reply;
403                     reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
404                 }
405             }
406         /* Queue Configuration messages. */
407             rpc get_queue_config {
408                 input {
409                     uses queue_get_config_request;
410                     reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
411                 }
412                 output {
413                     uses queue_get_config_reply;
414                     reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
415                 }
416             } 
417
418         /* Controller role change request messages. */
419             rpc role_request {
420                 input {
421                     uses role_request;
422                     reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
423                 }
424                 output {
425                     uses role_reply;
426                     reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
427                 }
428             } /* Controller/switch message */
429             
430         /* Asynchronous message configuration. */
431             notification get_async_request {
432                 uses get_async_request;
433                 reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
434                 
435             } /* Controller/switch message */
436             notification get_async_reply {
437                 uses get_async_reply;
438                 reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
439                 
440             } /* Controller/switch message */
441             notification set_async {
442                 uses set_async;
443                 reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
444                 
445             } /* Controller/switch message */
446         /* Meters and rate limiters configuration messages. */
447             rpc meter_mod {
448                 input {
449                     uses meter_mod;
450                     reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
451                 }
452             } /* Controller/switch message */
453 }