Draft implementation of integration tests
[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                 leaf-list packet-in-mask {
664                     type oft:packet-in-reason;
665                 }
666                 leaf-list port-status-mask {
667                     type oft:port-reason;
668                 }
669                 leaf-list flow-removed-mask {
670                     type oft:flow-removed-reason;
671                 }
672             } 
673             grouping set-async {
674                 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
675                 /* Controller/switch message */
676                 
677                 uses ofHeader;
678                 
679                 leaf-list packet-in-mask {
680                     type oft:packet-in-reason;
681                 }
682                 leaf-list port-status-mask {
683                     type oft:port-reason;
684                 }
685                 leaf-list flow-removed-mask {
686                     type oft:flow-removed-reason;
687                 }
688             } 
689             /* Meters and rate limiters configuration messages. */
690             grouping meter-mod {
691                 // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
692                 /* Controller/switch message */
693
694                 uses ofHeader;
695                 
696                 leaf command {
697                     type oft:meter-mod-command;
698                 } 
699                 leaf flags {
700                     type oft:meter-flags;
701                 }            
702                 leaf meter-id {
703                     type oft:meter-id;
704                 }   
705                 list bands {
706                     uses meter-band-header;
707                 }
708             } 
709             
710             grouping meter-band-header {
711                 leaf type {
712                     type oft:meter-band-type;
713                 }
714                 leaf rate {
715                     type uint32;
716                 }
717                 leaf burst-size {
718                     type uint32;
719                 }
720             }
721
722
723
724                 /* Immutable messages. */
725             notification hello-message {
726                 uses hello;
727                 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
728                 
729                 /* Symmetric message */
730             }
731             notification error-message {
732                 uses error;
733                 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
734                 
735                 /* Symmetric message */
736             }
737             notification echo-request-message {
738                 uses echo-request;
739                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
740                 
741                 /* Symmetric message */
742             }
743             notification experimenter-message {
744                 uses experimenter;
745                 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
746                 // TODO:: does switch send this when understood experimenter msg from lib?
747                 /* Symmetric message */
748             }
749     // # Notification and RPCs
750         /* Symmetric RPC. */
751             rpc echo {
752                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
753                 input {
754                     uses echo-request;
755                 }
756                 /* Controller/switch message */
757                 output {
758                     uses echo-reply;
759                 }
760             }
761             
762             rpc echo-reply {
763                 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
764                 input {
765                     uses echo-reply;
766                 }
767             }
768             
769             rpc hello {
770                 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
771                 input {
772                     uses hello;
773                 }
774             }
775             
776             rpc experimenter {
777                 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
778                 input {
779                     uses experimenter;
780                 }
781             }
782
783         /* Switch configuration messages. */
784             rpc get-features {
785                 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
786                 input {
787                     uses features-request;
788                 }
789                 /* Controller/switch message */
790                 output {
791                     uses features-reply;
792                 }
793             }
794             
795             rpc get-config {
796                 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
797                 input {
798                     uses get-config-request;
799                 }
800                 output {
801                     uses get-config-reply;
802                 }
803                 /* Controller/switch message */
804             }
805             
806             rpc set-config {
807                 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
808                 input {
809                     uses set-config;
810                 }   
811                 /* Controller/switch message */
812             }
813         /* Asynchronous messages. */
814             notification packet-in-message {
815                 uses packet-in;
816                 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
817                 
818              /* Async message */
819             }
820             notification flow-removed-message {
821                 uses flow-removed;
822                 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
823                 
824                 /* Async message */
825             } 
826             notification port-status-message {
827                 uses port-status;
828                 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
829                 
830             } /* Async message */
831
832         /* Controller command messages. */
833             rpc packet-out {
834                 input {
835                     uses packet-out;
836                     // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
837                 }
838                 /* Controller/switch message */
839             } 
840             rpc flow-mod {
841                 input {
842                     uses flow-mod;
843                     // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
844                 }
845                 /* Controller/switch message */
846             } 
847             rpc group-mod {
848                 input {
849                     uses group-mod;
850                     // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
851                 }
852                 /* Controller/switch message */
853             } 
854             rpc port-mod {
855                 input {
856                     uses port-mod;
857                     // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
858                 }
859             } /* Controller/switch message */
860             
861             rpc table-mod {
862                 input {
863                     uses table-mod;
864                     // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
865                 }
866             } /* Controller/switch message */
867
868         /* Multipart messages. */
869             //FIXME: Arent this wire protocol specific?
870
871             notification multipart-request-message {
872                 uses multipart-request;
873                 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
874                 
875             } /* Controller/switch message */
876             notification multipart-reply-message {
877                 uses multipart-reply;
878                 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
879                 
880             } /* Controller/switch message */
881             
882
883             /* Barrier messages. */
884             rpc barrier {
885                 input {
886                     uses barrier-request;
887                     // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
888                 }
889                 output {
890                     uses barrier-reply;
891                     // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
892                 }
893             }
894         /* Queue Configuration messages. */
895             rpc get-queue-config {
896                 input {
897                     uses queue-get-config-request;
898                     // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
899                 }
900                 output {
901                     uses queue-get-config-reply;
902                     // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
903                 }
904             } 
905
906         /* Controller role change request messages. */
907             rpc role-request {
908                 input {
909                     uses role-request;
910                     // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
911                 }
912                 output {
913                     uses role-reply;
914                     // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
915                 }
916             } /* Controller/switch message */
917             
918         /* Asynchronous message configuration. */
919             rpc get-async {
920                 input {
921                     uses get-async-request;
922                     // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
923                 }
924                 output {
925                     uses get-async-reply;
926                     // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
927                 }
928             } 
929              /* Controller/switch message */
930             rpc set-async {
931                 input { 
932                     uses set-async;
933                 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
934                 }
935                 
936             } 
937         /* Meters and rate limiters configuration messages. */
938             rpc meter-mod {
939                 input {
940                     uses meter-mod;
941                     // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
942                 }
943             } /* Controller/switch message */
944 }