114d5119342a626d60907151d1063dd760ed9892
[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 ofHeader {
83                 //reference "ofpt_header struct in Openflow Switch 1.3 Spec"
84                 leaf version {
85                     type uint8;
86                     //reference "OpenFlow Header - OFP_VERSION";
87                 }
88                 leaf xid {
89                     type uint32;
90                     //reference "OpenFlow Header - transaction id";
91                 }
92             }
93             grouping ofHelloElementHeader {
94                 //reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"
95                 leaf type {
96                     type oft:hello-element-type;
97                     //reference "OpenFlow Header element type - OFPHET_*";
98                 }
99             }
100             grouping hello {
101                 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
102                 /* Symmetric message */
103                 uses ofHeader;
104                 
105                 list elements {
106                     uses ofHelloElementHeader;
107                     
108                     leaf data {
109                         type binary;
110                     }
111                 }
112             }
113             grouping error {
114                 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
115                 /* Symmetric message */
116                 uses ofHeader;
117                 
118                 leaf type {
119                     type oft:error-type;
120                 }
121                 leaf code {
122                     type uint16;
123                 }
124                 leaf data {
125                     type binary; 
126                 }
127             }
128             grouping echo-request {
129                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
130                 /* Symmetric message */
131                 uses ofHeader;
132                 
133                 leaf data {
134                     type binary;
135                 }
136             }
137             grouping echo-reply {
138                 // reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
139                 /* Symmetric message */
140                 uses ofHeader;
141                 
142                 leaf data {
143                     type binary;
144                 }
145             }
146             grouping experimenter {
147                 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
148                 /* Symmetric message */
149                 uses ofHeader;
150                 
151                 leaf experimenter {
152                     type uint32;
153                 }
154                 leaf exp_type {
155                     type uint32;
156                 }
157             }
158         /* Switch configuration messages. */
159             grouping features-request {
160                 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
161                 /* Controller/switch message */
162                 uses ofHeader;
163             }
164             grouping features-reply {
165                 // reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
166                 /* Controller/switch message */
167                 uses ofHeader;
168                 
169                 leaf datapathId {
170                     type uint64;
171                 }
172                 leaf buffers {
173                     type uint32;
174                 }
175                 leaf tables {
176                     type uint8;
177                 }
178                 leaf auxiliaryId {
179                     type uint8;
180                 }
181                 leaf capabilities {
182                     type uint32;
183                 }
184                 leaf reserved {
185                     type uint32;
186                 }
187             }
188             grouping get-config-request {
189                 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
190                 /* Controller/switch message */
191                 uses ofHeader;
192             }
193             grouping get-config-reply {
194                 // reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
195                 /* Controller/switch message */
196                 uses ofHeader;
197                 
198                 leaf flags {
199                     type oft:switch-config-flag;
200                 }
201                 leaf miss-send-len {
202                     type uint16;
203                 }
204             }
205             grouping set-config {
206                 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
207                 /* Controller/switch message */
208                 
209                 uses ofHeader;
210                 
211                 leaf flags {
212                     type oft:switch-config-flag;
213                 }
214                 leaf miss-send-len {
215                     type uint16;
216                 }
217             }
218         /* Asynchronous messages. */
219             grouping packet-in {
220                 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
221                 /* Async message */
222                 
223                 uses ofHeader;
224                 
225                 leaf buffer-id {
226                     // ID assigned by datapath.
227                     type uint32;
228                 }  
229                 leaf total-len {
230                     // Full length of frame.
231                     type uint16;
232                 }
233                 leaf reason {
234                     // Reason packet is being sent (one of OFPR_*) 
235                     type uint8;
236                 }
237                 leaf table-id {
238                     // ID of the table that was looked up
239                     type oft:table-id;
240                 }
241                 leaf cookie {
242                     // Cookie of the flow entry that was looked up.
243                     type uint64;
244                 }
245                 
246                 //TODO:: add match leaf
247                 // leaf match {
248                 //     type oft:match
249                 // }
250
251 // struct ofp_match match; /* Packet metadata. Variable size. */
252 // /* The variable size and padded match is always followed by:
253 //  *   - Exactly 2 all-zero padding bytes, then
254 //  *   - An Ethernet frame whose length is inferred from header.length.
255 //  * The padding bytes preceding the Ethernet frame ensure that the IP
256 //  * header (if any) following the Ethernet header is 32-bit aligned.
257 //  */
258                 leaf data {
259                     type binary;
260                 }
261                 
262             }
263             grouping flow-removed {
264                 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
265                 /* Async message */
266                 uses ofHeader;
267                 
268                 leaf cookie {
269                     type uint64;
270                 }
271                 leaf priority {
272                     type uint16;
273                 }
274                 leaf reason {
275                     type oft:flow-removed-reason;
276                 }
277                 leaf table-id {
278                     type oft:table-id;
279                 }
280                 leaf duration-sec {
281                     type uint32;
282                 }
283                 leaf duration-nsec {
284                     type uint32;
285                 }
286                 leaf idle-timeout {
287                     type uint16;
288                 }
289                 leaf hard-timeout {
290                     type uint16;
291                 }
292                 leaf packet-count {
293                     type uint64;
294                 }
295                 leaf byte-count {
296                     type uint64;
297                 }
298                 //TODO:: add match leaf
299                 //leaf match {
300                 //    type oft:match;
301                 //}
302             } 
303             grouping port-status {
304                 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
305                 
306                 uses ofHeader;
307                 
308                 uses port;
309                 
310                 leaf reason {
311                     type oft:port-reason;
312                 }
313             } /* Async message */
314         /* Controller command messages. */
315             grouping packet-out {
316                 // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
317                 /* Controller/switch message */
318                 
319                 uses ofHeader;
320                 
321                 list actions {
322                     uses ofaction:action-header;
323                     
324                     leaf data {
325                         type binary;
326                     }
327                 }
328                 
329                 leaf buffer-id {
330                     type uint32;
331                 }
332                 leaf in-port {
333                     type oft:port-number;
334                 }
335             } 
336             grouping flow-mod {
337                 // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
338                 /* Controller/switch message */
339                 
340                 uses ofHeader;
341                 
342                 leaf cookie {
343                     type uint64;
344                 }
345                 leaf cookie-mask {
346                     type uint64;
347                 }
348                 leaf table-id {
349                     type oft:table-id;
350                 }
351                 leaf command {
352                     type oft:flow-mod-command;
353                 }
354                 leaf idle-timeout {
355                     type uint16;
356                 }
357                 leaf hard-timeout {
358                     type uint16;
359                 }
360                 leaf priority {
361                     type uint16;
362                 }
363                 leaf buffer-id {
364                     type uint32;
365                 }
366                 leaf out-port {
367                     type oft:port-number;
368                 }
369                 leaf out-group {
370                     type uint32;
371                 }
372                 leaf flags {
373                     type uint16;
374                 }
375                 //TODO:: add match leaf
376             } 
377             grouping group-mod {
378                 // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
379                 /* Controller/switch message */
380                 
381                 uses ofHeader;
382                 
383                 leaf command {
384                     type oft:group-mod-command;
385                 }
386                 leaf type {
387                     type oft:group-type;
388                 }
389                 leaf group-id {
390                     type uint32;
391                 }
392                 
393                 list buckets {
394                     uses bucket;
395                 }
396             }
397             grouping bucket {
398                 leaf weight {
399                     type uint16;
400                 }
401                 leaf watch-port {
402                     type oft:port-number;
403                 }
404                 leaf watch-group {
405                     type uint32;
406                 }
407                 
408                 list actions {
409                     uses ofaction:action-header;
410                 }
411             }
412             grouping port-mod {
413                 // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
414                 /* Controller/switch message */
415
416                 uses ofHeader;
417                 
418                 leaf port-no {
419                     type oft:port-number;
420                 }
421                 leaf hw-address {
422                     type yang:mac-address;
423                 }       
424                 leaf config {
425                     type oft:port-config;
426                 }   
427                 leaf mask {
428                     type oft:port-config;
429                 }  
430                 leaf advertise {
431                     type oft:port-config;
432                 }
433             } 
434             grouping table-mod {
435                 // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
436                 /* Controller/switch message */
437
438                 uses ofHeader;
439                 
440                 leaf table-id {
441                     type oft:table-id;
442                 }
443                 leaf config {
444                     type oft:port-config;
445                 }                
446             } 
447             
448         /* Multipart messages. */
449             grouping multipart-request {
450                 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
451                 /* Controller/switch message */
452
453                 uses ofHeader;
454                 
455                 leaf type {
456                     type oft:multipart-type;
457                 }          
458                 leaf flags {
459                     type oft:multipart-request-flags;
460                 }      
461                 choice body {
462                     case multipart-flow {
463                         leaf length {
464                             type uint16;
465                         }
466                         leaf table-id {
467                             type uint8;
468                         }
469                         leaf duration-sec {
470                             type uint32;
471                         }
472                         leaf duration-nsec {
473                             type uint32;
474                         }
475                         leaf priority {
476                             type uint16;
477                         }
478                         leaf idle-timeout {
479                             type uint16;
480                         }
481                         leaf hard-timeout {
482                             type uint16;
483                         }
484                         leaf flags {
485                             type uint16;
486                         }
487                         leaf cookie {
488                             type uint64;
489                         }
490                         leaf packet-count {
491                             type uint64;
492                         }
493                         leaf byte-count {
494                             type uint64;
495                         }
496                         leaf match {
497                             type uint64;
498                         }
499                     }
500                 }
501             } 
502             grouping multipart-reply {
503                 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
504                 /* Controller/switch message */
505
506                 uses ofHeader;
507                 
508                 leaf type {
509                     type oft:multipart-type;
510                 }
511                 leaf flags {
512                     type oft:multipart-request-flags;
513                 }
514                 choice body {
515                     case multipart-desc {
516                         leaf mfr_desc {
517                             type string;
518                         }
519                         leaf hw_desc {
520                             type string;
521                         }
522                         leaf sw_desc {
523                             type string;
524                         }
525                         leaf serial_num {
526                             type string;
527                         }
528                         leaf dp_desc {
529                             type string;
530                         }
531                     }
532                     case multipart-flow {
533                         leaf length {
534                             type uint16;
535                         }
536                         leaf table-id {
537                             type uint8;
538                         }
539                         leaf duration-sec {
540                             type uint32;
541                         }
542                         leaf duration-nsec {
543                             type uint32;
544                         }
545                         leaf priority {
546                             type uint16;
547                         }
548                         leaf idle-timeout {
549                             type uint16;
550                         }
551                         leaf hard-timeout {
552                             type uint16;
553                         }
554                         leaf flags {
555                             type uint16;
556                         }
557                         leaf cookie {
558                             type uint64;
559                         }
560                         leaf packet-count {
561                             type uint64;
562                         }
563                         leaf byte-count {
564                             type uint64;
565                         }
566                         leaf match {
567                             type uint64;
568                         }
569                     }
570                 }
571             } 
572             /* Barrier messages. */
573             grouping barrier-request {
574                 // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
575                 /* Controller/switch message */
576                 uses ofHeader;
577             } 
578             grouping barrier-reply {
579                 // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
580                 /* Controller/switch message */
581                 uses ofHeader;
582             } 
583         /* Queue Configuration messages. */
584             grouping queue-get-config-request {
585                 // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
586                 /* Controller/switch message */
587                 
588                 uses ofHeader;
589                 
590                 leaf port {
591                     type oft:port-number;
592                 }
593             } 
594             grouping queue-get-config-reply {
595                 // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
596                 /* Controller/switch message */
597
598                 uses ofHeader;
599                 
600                 leaf port {
601                     type oft:port-number;
602                 }
603                 list queues {
604                     uses packet-queue;
605                 }
606             } 
607             grouping packet-queue {
608                 leaf queue-id {
609                     type oft:queue-id;
610                 }
611                 leaf port {
612                     type oft:port-number;
613                 }
614                 list properties {
615                     uses queue-property-header;
616                 }
617             }
618             grouping queue-property-header {
619                 leaf property {
620                     type oft:queue-property;
621                 }
622             }
623             /* Controller role change request messages. */
624             grouping role-request {
625                 // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
626                 /* Controller/switch message */
627                 
628                 uses ofHeader;
629                 
630                 leaf role {
631                     type oft:controller-role;
632                 }
633                 leaf generation-id {
634                     type uint64;
635                 }
636             } 
637             grouping role-reply {
638                 // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
639                 /* Controller/switch message */
640
641                 uses ofHeader;
642                 
643                 leaf role {
644                     type oft:controller-role;
645                 }
646                 leaf generation-id {
647                     type uint64;
648                 }
649             } 
650             /* Asynchronous message configuration. */
651             grouping get-async-request {
652                 // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
653                 /* Controller/switch message */
654
655                 uses ofHeader;                
656             } 
657             grouping get-async-reply {
658                 // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
659                 /* Controller/switch message */
660
661                 uses ofHeader;
662                 
663                 list packet-in-mask {
664                     leaf-list mask {
665                         type oft:packet-in-reason;
666                     }
667                 }
668                 list port-status-mask {
669                     leaf-list mask {
670                         type oft:port-reason;
671                     }
672                 }
673                 list flow-removed-mask {
674                     leaf-list mask {
675                         type oft:flow-removed-reason;
676                     }
677                 }
678             } 
679             grouping set-async {
680                 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
681                 /* Controller/switch message */
682                 
683                 uses ofHeader;
684                 
685                 leaf-list packet-in-mask {
686                     type oft:packet-in-reason;
687                 }
688                 leaf-list port-status-mask {
689                     type oft:port-reason;
690                 }
691                 leaf-list flow-removed-mask {
692                     type oft:flow-removed-reason;
693                 }
694             } 
695             /* Meters and rate limiters configuration messages. */
696             grouping meter-mod {
697                 // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
698                 /* Controller/switch message */
699
700                 uses ofHeader;
701                 
702                 leaf command {
703                     type oft:meter-mod-command;
704                 } 
705                 leaf flags {
706                     type oft:meter-flags;
707                 }            
708                 leaf meter-id {
709                     type oft:meter-id;
710                 }   
711                 list bands {
712                     uses meter-band-header;
713                 }
714             } 
715             
716             grouping meter-band-header {
717                 leaf type {
718                     type oft:meter-band-type;
719                 }
720                 leaf rate {
721                     type uint32;
722                 }
723                 leaf burst-size {
724                     type uint32;
725                 }
726             }
727
728
729
730                 /* Immutable messages. */
731             notification hello-message {
732                 uses hello;
733                 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
734                 
735                 /* Symmetric message */
736             }
737             notification error-message {
738                 uses error;
739                 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
740                 
741                 /* Symmetric message */
742             }
743             notification echo-request-message {
744                 uses echo-request;
745                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
746                 
747                 /* Symmetric message */
748             }
749             notification experimenter-message {
750                 uses experimenter;
751                 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
752                 // TODO:: does switch send this when understood experimenter msg from lib?
753                 /* Symmetric message */
754             }
755     // # Notification and RPCs
756         /* Symmetric RPC. */
757             rpc echo {
758                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
759                 input {
760                     uses echo-request;
761                 }
762                 /* Controller/switch message */
763                 output {
764                     uses echo-reply;
765                 }
766             }
767             
768             rpc echo-reply {
769                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
770                 input {
771                     uses echo-reply;
772                 }
773             }
774             
775             rpc hello {
776                 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
777                 input {
778                     uses hello;
779                 }
780             }
781             
782             rpc experimenter {
783                 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
784                 input {
785                     uses experimenter;
786                 }
787             }
788
789         /* Switch configuration messages. */
790             rpc get-features {
791                 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
792                 input {
793                     uses features-request;
794                 }
795                 /* Controller/switch message */
796                 output {
797                     uses features-reply;
798                 }
799             }
800             
801             rpc get-config {
802                 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
803                 input {
804                     uses get-config-request;
805                 }
806                 output {
807                     uses get-config-reply;
808                 }
809                 /* Controller/switch message */
810             }
811             
812             rpc set-config {
813                 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
814                 input {
815                     uses set-config;
816                 }   
817                 /* Controller/switch message */
818             }
819         /* Asynchronous messages. */
820             notification packet-in-message {
821                 uses packet-in;
822                 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
823                 
824              /* Async message */
825             }
826             notification flow-removed-message {
827                 uses flow-removed;
828                 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
829                 
830                 /* Async message */
831             } 
832             notification port-status-message {
833                 uses port-status;
834                 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
835                 
836             } /* Async message */
837
838         /* Controller command messages. */
839             rpc packet-out {
840                 input {
841                     uses packet-out;
842                     // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
843                 }
844                 /* Controller/switch message */
845             } 
846             rpc flow-mod {
847                 input {
848                     uses flow-mod;
849                     // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
850                 }
851                 /* Controller/switch message */
852             } 
853             rpc group-mod {
854                 input {
855                     uses group-mod;
856                     // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
857                 }
858                 /* Controller/switch message */
859             } 
860             rpc port-mod {
861                 input {
862                     uses port-mod;
863                     // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
864                 }
865             } /* Controller/switch message */
866             
867             rpc table-mod {
868                 input {
869                     uses table-mod;
870                     // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
871                 }
872             } /* Controller/switch message */
873
874         /* Multipart messages. */
875             //FIXME: Arent this wire protocol specific?
876
877             notification multipart-request-message {
878                 uses multipart-request;
879                 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
880                 
881             } /* Controller/switch message */
882             notification multipart-reply-message {
883                 uses multipart-reply;
884                 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
885                 
886             } /* Controller/switch message */
887             
888
889             /* Barrier messages. */
890             rpc barrier {
891                 input {
892                     uses barrier-request;
893                     // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
894                 }
895                 output {
896                     uses barrier-reply;
897                     // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
898                 }
899             }
900         /* Queue Configuration messages. */
901             rpc get-queue-config {
902                 input {
903                     uses queue-get-config-request;
904                     // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
905                 }
906                 output {
907                     uses queue-get-config-reply;
908                     // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
909                 }
910             } 
911
912         /* Controller role change request messages. */
913             rpc role-request {
914                 input {
915                     uses role-request;
916                     // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
917                 }
918                 output {
919                     uses role-reply;
920                     // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
921                 }
922             } /* Controller/switch message */
923             
924         /* Asynchronous message configuration. */
925             rpc get-async {
926                 input {
927                     uses get-async-request;
928                     // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
929                 }
930                 output {
931                     uses get-async-reply;
932                     // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
933                 }
934             } 
935              /* Controller/switch message */
936             rpc set-async {
937                 input { 
938                     uses set-async;
939                 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
940                 }
941                 
942             } 
943         /* Meters and rate limiters configuration messages. */
944             rpc meter-mod {
945                 input {
946                     uses meter-mod;
947                     // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
948                 }
949             } /* Controller/switch message */
950 }