Merge "Fixed duplicates of RPC statements"
[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     // # Notification and RPCs
261         
262
263         /* Switch configuration messages. */
264             rpc get_features {
265                 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
266                 input {
267                     uses features_request;
268                 }
269                 /* Controller/switch message */
270                 output {
271                     uses features_reply;
272                 }
273             }
274             
275             rpc get_config {
276                 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
277                 input {
278                     uses get_config_request;
279                 }
280                 output {
281                     uses get_config_reply;
282                 }
283                 /* Controller/switch message */
284             }
285             
286             rpc set_config {
287                 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
288                 input {
289                     uses set_config;
290                 }   
291                 /* Controller/switch message */
292             }
293         /* Asynchronous messages. */
294             notification packet_in {
295                 uses packet_in;
296                 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
297                 
298              /* Async message */
299             }
300             notification flow_removed {
301                 uses flow_removed;
302                 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
303                 
304                 /* Async message */
305             } 
306             notification port_status {
307                 uses port_status;
308                 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
309                 
310             } /* Async message */
311
312         /* Controller command messages. */
313             rpc packet_out {
314                 input {
315                     uses packet_out;
316                     // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
317                 }
318                 /* Controller/switch message */
319             } 
320             rpc flow_mod {
321                 input {
322                     uses flow_mod;
323                     // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
324                 }
325                 /* Controller/switch message */
326             } 
327             rpc group_mod {
328                 input {
329                     uses group_mod;
330                     // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
331                 }
332                 /* Controller/switch message */
333             } 
334             rpc port_mod {
335                 input {
336                     uses port_mod;
337                     // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
338                 }
339             } /* Controller/switch message */
340             
341             rpc table_mod {
342                 input {
343                     uses table_mod;
344                     // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
345                 }
346             } /* Controller/switch message */
347
348         /* Multipart messages. */
349             //FIXME: Arent this wire protocol specific?
350
351             notification multipart_request {
352                 uses multipart_request;
353                 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
354                 
355             } /* Controller/switch message */
356             notification multipart_reply {
357                 uses multipart_reply;
358                 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
359                 
360             } /* Controller/switch message */
361             
362
363             /* Barrier messages. */
364             rpc barrier {
365                 input {
366                     uses barrier_request;
367                     // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
368                 }
369                 output {
370                     uses barrier_reply;
371                     // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
372                 }
373             }
374         /* Queue Configuration messages. */
375             rpc get_queue_config {
376                 input {
377                     uses queue_get_config_request;
378                     // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
379                 }
380                 output {
381                     uses queue_get_config_reply;
382                     // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
383                 }
384             } 
385
386         /* Controller role change request messages. */
387             rpc role_request {
388                 input {
389                     uses role_request;
390                     // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
391                 }
392                 output {
393                     uses role_reply;
394                     // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
395                 }
396             } /* Controller/switch message */
397             
398         /* Asynchronous message configuration. */
399             notification get_async_request {
400                 uses get_async_request;
401                 // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
402                 
403             } /* Controller/switch message */
404             notification get_async_reply {
405                 uses get_async_reply;
406                 // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
407                 
408             } /* Controller/switch message */
409             notification set_async {
410                 uses set_async;
411                 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
412                 
413             } /* Controller/switch message */
414         /* Meters and rate limiters configuration messages. */
415             rpc meter_mod {
416                 input {
417                     uses meter_mod;
418                     // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
419                 }
420             } /* Controller/switch message */
421 }