2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
9 module openflow-protocol {
\r
10 namespace "urn:opendaylight:openflow:protocol";
\r
13 import ietf-yang-types {prefix yang;}
\r
15 import openflow-types {prefix oft;}
\r
16 import openflow-extensible-match { prefix oxm;}
\r
17 import openflow-instruction { prefix ofinstruction;}
\r
18 import openflow-action {prefix ofaction;}
\r
20 revision "2013-07-31" {
\r
21 description "OpenFlow 1.3 - protocol objects model";
\r
24 // Generic Structures
\r
25 grouping port-grouping {
\r
26 reference "ofp_port";
\r
31 type yang:mac-address;
\r
37 description "Bitmap of OFPPC_* flags.";
\r
38 type oft:port-config;
\r
41 description "Bitmap of OFPPS_* flags.";
\r
42 type oft:port-state;
\r
44 leaf current-features {
\r
45 description "Current features.";
\r
46 type oft:port-features;
\r
48 leaf advertised-features {
\r
49 description "Features being advertised by the port.";
\r
50 type oft:port-features;
\r
52 leaf supported-features {
\r
53 description "Features supported by the port.";
\r
54 type oft:port-features;
\r
56 leaf peer-features {
\r
57 description "Features advertised by peer.";
\r
58 type oft:port-features;
\r
61 description "Current port bitrate in kbps.";
\r
66 description "Max port bitrate in kbps";
\r
73 type oft:port-config-v10;
\r
76 type oft:port-state-v10;
\r
78 leaf current-features-v10 {
\r
79 description "Current features.";
\r
80 type oft:port-features-v10;
\r
82 leaf advertised-features-v10 {
\r
83 description "Features being advertised by the port.";
\r
84 type oft:port-features-v10;
\r
86 leaf supported-features-v10 {
\r
87 description "Features supported by the port.";
\r
88 type oft:port-features-v10;
\r
90 leaf peer-features-v10 {
\r
91 description "Features advertised by peer.";
\r
92 type oft:port-features-v10;
\r
96 grouping buckets-grouping {
\r
98 uses bucket-grouping;
\r
102 grouping bucket-grouping {
\r
103 description "Bucket for use in groups.";
\r
105 description "Relative weight of bucket. Only
\r
106 defined for select groups.";
\r
110 description "Port whose state affects whether this
\r
111 bucket is live. Only required for fast
\r
113 type oft:port-number;
\r
116 description "Group whose state affects whether this
\r
117 bucket is live. Only required for fast
\r
122 uses ofaction:actions-grouping;
\r
125 container table-features-properties-container {
\r
126 uses table-features-properties-grouping;
\r
129 grouping table-features-properties-grouping {
\r
130 list table-feature-properties {
\r
133 type oft:table-features-prop-type;
\r
138 // # MESSAGE Structures
\r
139 /* Immutable messages. */
\r
140 grouping ofHeader {
\r
141 reference "ofp_header struct in Openflow Switch 1.3 Spec";
\r
144 description "OpenFlow version";
\r
148 description "Transaction ID";
\r
151 grouping ofHelloElementHeader {
\r
152 reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec";
\r
154 type oft:hello-element-type;
\r
155 //reference "OpenFlow Header element type - OFPHET_*";
\r
159 reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";
\r
160 /* Symmetric message */
\r
164 uses ofHelloElementHeader;
\r
166 leaf-list version-bitmap {
\r
172 reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";
\r
173 /* Symmetric message */
\r
192 grouping echo-request {
\r
193 reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";
\r
194 /* Symmetric message */
\r
201 grouping echo-reply {
\r
202 reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec";
\r
203 /* Symmetric message */
\r
210 grouping experimenter {
\r
211 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";
\r
212 /* Symmetric message */
\r
215 leaf experimenter {
\r
216 type oft:experimenter-id;
\r
222 /* Switch configuration messages. */
\r
223 grouping features-request {
\r
224 reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec";
\r
225 /* Controller/switch message */
\r
228 grouping features-reply {
\r
229 reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec";
\r
230 /* Controller/switch message */
\r
245 leaf capabilities {
\r
246 type oft:capabilities;
\r
251 // OF1.0 structures
\r
252 leaf capabilities-v10 {
\r
253 type oft:capabilities-v10;
\r
256 type oft:action-type-v10;
\r
259 uses port-grouping;
\r
262 grouping get-config-request {
\r
263 reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";
\r
264 /* Controller/switch message */
\r
267 grouping get-config-reply {
\r
268 reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";
\r
269 /* Controller/switch message */
\r
273 type oft:switch-config-flag;
\r
275 leaf miss-send-len {
\r
279 grouping set-config {
\r
280 reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec";
\r
281 /* Controller/switch message */
\r
286 type oft:switch-config-flag;
\r
288 leaf miss-send-len {
\r
292 /* Asynchronous messages. */
\r
293 grouping packet-in {
\r
294 reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec";
\r
295 /* Async message */
\r
300 // ID assigned by datapath.
\r
304 // Full length of frame.
\r
308 // Reason packet is being sent (one of OFPR_*)
\r
309 type oft:packet-in-reason;
\r
312 // ID of the table that was looked up
\r
316 // Cookie of the flow entry that was looked up.
\r
319 uses oxm:match-grouping;
\r
325 // OF1.0 structures
\r
330 grouping flow-removed {
\r
331 reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec";
\r
332 /* Async message */
\r
342 type oft:flow-removed-reason;
\r
347 leaf duration-sec {
\r
350 leaf duration-nsec {
\r
353 leaf idle-timeout {
\r
356 leaf hard-timeout {
\r
359 leaf packet-count {
\r
365 uses oxm:match-grouping;
\r
367 // OF1.0 structures
\r
368 uses oxm:match-v10-grouping;
\r
370 grouping port-status {
\r
371 reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec";
\r
375 uses port-grouping;
\r
378 type oft:port-reason;
\r
381 /* Controller command messages. */
\r
382 grouping packet-out {
\r
383 reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec";
\r
384 /* Controller/switch message */
\r
388 uses ofaction:actions-grouping;
\r
397 type oft:port-number;
\r
400 grouping flow-mod {
\r
401 reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec";
\r
402 /* Controller/switch message */
\r
416 type oft:flow-mod-command;
\r
418 leaf idle-timeout {
\r
421 leaf hard-timeout {
\r
431 type oft:port-number;
\r
437 type oft:flow-mod-flags;
\r
439 uses oxm:match-grouping;
\r
441 uses ofinstruction:instructions-grouping;
\r
443 // OF1.0 structures
\r
445 type oft:flow-mod-flags-v10;
\r
447 uses oxm:match-v10-grouping;
\r
448 uses ofaction:actions-grouping;
\r
450 grouping group-mod {
\r
451 reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec";
\r
452 /* Controller/switch message */
\r
457 type oft:group-mod-command;
\r
460 type oft:group-type;
\r
466 uses buckets-grouping;
\r
469 grouping port-mod {
\r
470 reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec";
\r
471 /* Controller/switch message */
\r
476 type oft:port-number;
\r
479 type yang:mac-address;
\r
482 type oft:port-config;
\r
485 type oft:port-config;
\r
488 type oft:port-features;
\r
490 // OF1.0 structures
\r
492 type oft:port-config-v10;
\r
495 type oft:port-config-v10;
\r
497 leaf advertise-v10 {
\r
498 type oft:port-features-v10;
\r
501 grouping table-mod {
\r
502 reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec";
\r
503 /* Controller/switch message */
\r
511 type oft:table-config;
\r
515 /* Multipart messages. */
\r
516 grouping multipart-request {
\r
517 reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec";
\r
518 /* Controller/switch message */
\r
523 type oft:multipart-type;
\r
526 type oft:multipart-request-flags;
\r
528 choice multipart-request-body {
\r
529 case multipart-request-desc-case {
\r
530 container multipart-request-desc {
\r
536 case multipart-request-flow-case {
\r
537 container multipart-request-flow {
\r
553 uses oxm:match-grouping;
\r
555 // OF1.0 structures
\r
556 uses oxm:match-v10-grouping;
\r
559 case multipart-request-aggregate-case {
\r
560 container multipart-request-aggregate {
\r
576 uses oxm:match-grouping;
\r
578 // OF1.0 structures
\r
579 uses oxm:match-v10-grouping;
\r
582 case multipart-request-table-case {
\r
583 container multipart-request-table {
\r
589 case multipart-request-port-stats-case {
\r
590 container multipart-request-port-stats {
\r
596 case multipart-request-queue-case {
\r
597 container multipart-request-queue {
\r
606 case multipart-request-group-case {
\r
607 container multipart-request-group {
\r
613 case multipart-request-group-desc-case {
\r
614 container multipart-request-group-desc {
\r
620 case multipart-request-group-features-case {
\r
621 container multipart-request-group-features {
\r
627 case multipart-request-meter-case {
\r
628 container multipart-request-meter {
\r
634 case multipart-request-meter-config-case {
\r
635 container multipart-request-meter-config {
\r
641 case multipart-request-meter-features-case {
\r
642 container multipart-request-meter-features {
\r
648 case multipart-request-table-features-case {
\r
649 container multipart-request-table-features {
\r
650 list table-features {
\r
657 leaf metadata-match {
\r
660 leaf metadata-write {
\r
664 type oft:table-config;
\r
669 uses table-features-properties-grouping;
\r
673 case multipart-request-port-desc-case {
\r
674 container multipart-request-port-desc {
\r
680 case multipart-request-experimenter-case {
\r
681 container multipart-request-experimenter {
\r
682 // empty body - used for experimenter augmentation
\r
687 grouping multipart-reply {
\r
688 reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec";
\r
689 /* Controller/switch message */
\r
694 type oft:multipart-type;
\r
697 type oft:multipart-request-flags;
\r
699 choice multipart-reply-body {
\r
700 case multipart-reply-desc-case {
\r
701 container multipart-reply-desc {
\r
719 case multipart-reply-flow-case {
\r
720 container multipart-reply-flow {
\r
725 leaf duration-sec {
\r
728 leaf duration-nsec {
\r
734 leaf idle-timeout {
\r
737 leaf hard-timeout {
\r
741 type oft:flow-mod-flags;
\r
746 leaf packet-count {
\r
752 uses oxm:match-grouping;
\r
754 uses ofinstruction:instructions-grouping;
\r
756 // OF1.0 structures
\r
757 uses oxm:match-v10-grouping;
\r
758 uses ofaction:actions-grouping;
\r
762 case multipart-reply-aggregate-case {
\r
763 container multipart-reply-aggregate {
\r
764 leaf packet-count {
\r
775 case multipart-reply-table-case {
\r
776 container multipart-reply-table {
\r
781 leaf active-count {
\r
784 leaf lookup-count {
\r
787 leaf matched-count {
\r
791 // OF1.0 structures
\r
796 type oft:flow-wildcards-v10;
\r
810 case multipart-reply-port-stats-case {
\r
811 container multipart-reply-port-stats {
\r
840 leaf rx-frame-err {
\r
852 leaf duration-sec {
\r
855 leaf duration-nsec {
\r
861 case multipart-reply-queue-case {
\r
862 container multipart-reply-queue {
\r
879 leaf duration-sec {
\r
882 leaf duration-nsec {
\r
888 case multipart-reply-group-case {
\r
889 container multipart-reply-group {
\r
897 leaf packet-count {
\r
903 leaf duration-sec {
\r
906 leaf duration-nsec {
\r
909 list bucket-stats {
\r
910 leaf packet-count {
\r
920 case multipart-reply-group-desc-case {
\r
921 container multipart-reply-group-desc {
\r
924 type oft:group-type;
\r
929 uses buckets-grouping;
\r
933 case multipart-reply-group-features-case {
\r
934 container multipart-reply-group-features {
\r
936 type oft:group-types;
\r
938 leaf capabilities {
\r
939 type oft:group-capabilities;
\r
941 leaf-list max_groups {
\r
944 leaf-list actions-bitmap {
\r
945 type oft:action-type;
\r
949 case multipart-reply-meter-case {
\r
950 container multipart-reply-meter {
\r
958 leaf packet-in-count {
\r
961 leaf byte-in-count {
\r
964 leaf duration-sec {
\r
967 leaf duration-nsec {
\r
970 list meter-band-stats {
\r
971 leaf packet-band-count {
\r
974 leaf byte-band-count {
\r
981 case multipart-reply-meter-config-case {
\r
982 container multipart-reply-meter-config {
\r
983 list meter-config {
\r
985 type oft:meter-flags;
\r
991 uses meter-band-header;
\r
996 case multipart-reply-meter-features-case {
\r
997 container multipart-reply-meter-features {
\r
1002 type oft:meter-band-type-bitmap;
\r
1004 leaf capabilities {
\r
1005 type oft:meter-flags;
\r
1015 case multipart-reply-table-features-case {
\r
1016 container multipart-reply-table-features {
\r
1017 list table-features {
\r
1024 leaf metadata-match {
\r
1027 leaf metadata-write {
\r
1031 type oft:table-config;
\r
1033 leaf max-entries {
\r
1036 uses table-features-properties-grouping;
\r
1040 case multipart-reply-port-desc-case {
\r
1041 container multipart-reply-port-desc {
\r
1043 uses port-grouping;
\r
1047 case multipart-reply-experimenter-case {
\r
1048 container multipart-reply-experimenter {
\r
1049 // empty body - used for experimenter augmentation
\r
1054 /* Barrier messages. */
\r
1055 grouping barrier-request {
\r
1056 reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec";
\r
1057 /* Controller/switch message */
\r
1060 grouping barrier-reply {
\r
1061 reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec";
\r
1062 /* Controller/switch message */
\r
1065 /* Queue Configuration messages. */
\r
1066 grouping queue-get-config-request {
\r
1067 reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";
\r
1068 /* Controller/switch message */
\r
1073 type oft:port-number;
\r
1076 grouping queue-get-config-reply {
\r
1077 reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";
\r
1078 /* Controller/switch message */
\r
1083 type oft:port-number;
\r
1086 uses packet-queue;
\r
1089 grouping packet-queue {
\r
1091 type oft:queue-id;
\r
1094 type oft:port-number;
\r
1096 uses queue-property-header;
\r
1098 container queue-prop-container {
\r
1099 uses queue-property-header;
\r
1101 grouping queue-property-header {
\r
1102 list queue-property {
\r
1105 type oft:queue-properties;
\r
1109 /* Controller role change request messages. */
\r
1110 grouping role-request {
\r
1111 reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec";
\r
1112 /* Controller/switch message */
\r
1117 type oft:controller-role;
\r
1119 leaf generation-id {
\r
1123 grouping role-reply {
\r
1124 reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec";
\r
1125 /* Controller/switch message */
\r
1130 type oft:controller-role;
\r
1132 leaf generation-id {
\r
1136 /* Asynchronous message configuration. */
\r
1137 grouping get-async-request {
\r
1138 reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec";
\r
1139 /* Controller/switch message */
\r
1143 grouping get-async-reply {
\r
1144 reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec";
\r
1145 /* Controller/switch message */
\r
1148 uses async-body-grouping;
\r
1150 grouping set-async {
\r
1151 reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec";
\r
1152 /* Controller/switch message */
\r
1155 uses async-body-grouping;
\r
1158 grouping async-body-grouping {
\r
1159 list packet-in-mask {
\r
1161 type oft:packet-in-reason;
\r
1164 list port-status-mask {
\r
1166 type oft:port-reason;
\r
1169 list flow-removed-mask {
\r
1171 type oft:flow-removed-reason;
\r
1175 /* Meters and rate limiters configuration messages. */
\r
1176 grouping meter-mod {
\r
1177 reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec";
\r
1178 /* Controller/switch message */
\r
1183 type oft:meter-mod-command;
\r
1186 type oft:meter-flags;
\r
1189 type oft:meter-id;
\r
1192 uses meter-band-header;
\r
1196 container meter-band-container {
\r
1197 uses meter-band-header;
\r
1199 grouping meter-band-header {
\r
1200 choice meter-band {
\r
1201 case meter-band-drop-case {
\r
1202 container meter-band-drop {
\r
1203 uses meter-band-commons;
\r
1206 case meter-band-dscp-remark-case {
\r
1207 container meter-band-dscp-remark {
\r
1208 uses meter-band-commons;
\r
1214 case meter-band-experimenter-case {
\r
1215 container meter-band-experimenter {
\r
1216 uses meter-band-commons;
\r
1222 grouping meter-band-commons {
\r
1224 type oft:meter-band-type;
\r
1234 /* Immutable messages. */
\r
1235 notification hello-message {
\r
1237 reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";
\r
1239 /* Symmetric message */
\r
1241 notification error-message {
\r
1243 reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";
\r
1245 /* Symmetric message */
\r
1247 notification echo-request-message {
\r
1248 uses echo-request;
\r
1249 reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";
\r
1251 /* Symmetric message */
\r
1253 notification experimenter-message {
\r
1254 uses experimenter;
\r
1255 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";
\r
1256 // TODO:: does switch send this when understood experimenter msg from lib?
\r
1257 /* Symmetric message */
\r
1259 // # Notification and RPCs
\r
1260 /* Symmetric RPC. */
\r
1263 uses echo-request;
\r
1265 /* Controller/switch message */
\r
1283 rpc experimenter {
\r
1285 uses experimenter;
\r
1289 /* Switch configuration messages. */
\r
1290 rpc get-features {
\r
1292 uses features-request;
\r
1294 /* Controller/switch message */
\r
1296 uses features-reply;
\r
1302 uses get-config-request;
\r
1305 uses get-config-reply;
\r
1307 /* Controller/switch message */
\r
1314 /* Controller/switch message */
\r
1316 /* Asynchronous messages. */
\r
1317 notification packet-in-message {
\r
1320 /* Async message */
\r
1322 notification flow-removed-message {
\r
1323 uses flow-removed;
\r
1325 /* Async message */
\r
1327 notification port-status-message {
\r
1330 } /* Async message */
\r
1332 /* Controller command messages. */
\r
1337 /* Controller/switch message */
\r
1343 /* Controller/switch message */
\r
1349 /* Controller/switch message */
\r
1355 } /* Controller/switch message */
\r
1361 } /* Controller/switch message */
\r
1363 /* Multipart messages. */
\r
1365 rpc multipart-request {
\r
1367 uses multipart-request;
\r
1371 /* Controller/switch message */
\r
1372 notification multipart-reply-message {
\r
1373 uses multipart-reply;
\r
1374 // notification because of multiple following responses
\r
1375 } /* Controller/switch message */
\r
1378 /* Barrier messages. */
\r
1381 uses barrier-request;
\r
1384 uses barrier-reply;
\r
1387 /* Queue Configuration messages. */
\r
1388 rpc get-queue-config {
\r
1390 uses queue-get-config-request;
\r
1393 uses queue-get-config-reply;
\r
1397 /* Controller role change request messages. */
\r
1398 rpc role-request {
\r
1400 uses role-request;
\r
1405 } /* Controller/switch message */
\r
1407 /* Asynchronous message configuration. */
\r
1410 uses get-async-request;
\r
1413 uses get-async-reply;
\r
1416 /* Controller/switch message */
\r
1423 /* Meters and rate limiters configuration messages. */
\r
1428 } /* Controller/switch message */
\r