2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 module openflow-protocol {
10 namespace "urn:opendaylight:openflow:protocol";
13 import ietf-yang-types {prefix yang;}
15 import openflow-types {prefix oft;}
16 import openflow-extensible-match { prefix oxm;}
17 import openflow-instruction { prefix ofinstruction;}
18 import openflow-action {prefix ofaction;}
20 revision "2013-07-31" {
21 description "#NOT_PUBLISHED# OpenFlow 1.3 - protocol objects model";
25 grouping port-grouping {
31 type yang:mac-address;
37 description "Bitmap of OFPPC_* flags.";
41 description "Bitmap of OFPPS_* flags.";
44 leaf current-features {
45 description "Current features.";
46 type oft:port-features;
48 leaf advertised-features {
49 description "Features being advertised by the port.";
50 type oft:port-features;
52 leaf supported-features {
53 description "Features supported by the port.";
54 type oft:port-features;
57 description "Features advertised by peer.";
58 type oft:port-features;
61 description "Current port bitrate in kbps.";
66 description "Max port bitrate in kbps";
73 type oft:port-config-v10;
76 type oft:port-state-v10;
78 leaf current-features-v10 {
79 description "Current features.";
80 type oft:port-features-v10;
82 leaf advertised-features-v10 {
83 description "Features being advertised by the port.";
84 type oft:port-features-v10;
86 leaf supported-features-v10 {
87 description "Features supported by the port.";
88 type oft:port-features-v10;
90 leaf peer-features-v10 {
91 description "Features advertised by peer.";
92 type oft:port-features-v10;
96 grouping buckets-grouping {
102 grouping bucket-grouping {
103 description "Bucket for use in groups.";
105 description "Relative weight of bucket. Only
106 defined for select groups.";
110 description "Port whose state affects whether this
111 bucket is live. Only required for fast
113 type oft:port-number;
116 description "Group whose state affects whether this
117 bucket is live. Only required for fast
122 uses ofaction:actions-grouping;
125 container table-features-properties-container {
126 uses table-features-properties-grouping;
129 grouping table-features-properties-grouping {
130 list table-feature-properties {
133 type oft:table-features-prop-type;
138 // # MESSAGE Structures
139 /* Immutable messages. */
141 reference "ofp_header struct in Openflow Switch 1.3 Spec";
144 description "OpenFlow version";
148 description "Transaction ID";
151 grouping ofHelloElementHeader {
152 reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec";
154 type oft:hello-element-type;
155 //reference "OpenFlow Header element type - OFPHET_*";
159 reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";
160 /* Symmetric message */
164 uses ofHelloElementHeader;
166 leaf-list version-bitmap {
172 reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";
173 /* Symmetric message */
192 grouping echo-request {
193 reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";
194 /* Symmetric message */
201 grouping echo-reply {
202 reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec";
203 /* Symmetric message */
210 grouping experimenter {
211 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";
212 /* Symmetric message */
216 type oft:experimenter-id;
223 grouping experimenter-core {
224 description "General experimenter message content suitable for symmetric and multipart message";
226 type oft:experimenter-id;
231 choice experimenter-data-of-choice {
232 // to be augmented by vendors
235 grouping experimenter-of-message {
236 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";
237 /* Symmetric message */
239 uses experimenter-core;
242 /* Switch configuration messages. */
243 grouping features-request {
244 reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec";
245 /* Controller/switch message */
248 grouping features-reply {
249 reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec";
250 /* Controller/switch message */
266 type oft:capabilities;
272 leaf capabilities-v10 {
273 type oft:capabilities-v10;
276 type oft:action-type-v10;
282 grouping get-config-request {
283 reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";
284 /* Controller/switch message */
287 grouping get-config-reply {
288 reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";
289 /* Controller/switch message */
293 type oft:switch-config-flag;
299 grouping set-config {
300 reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec";
301 /* Controller/switch message */
306 type oft:switch-config-flag;
312 /* Asynchronous messages. */
314 reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec";
320 // ID assigned by datapath.
324 // Full length of frame.
328 // Reason packet is being sent (one of OFPR_*)
329 type oft:packet-in-reason;
332 // ID of the table that was looked up
336 // Cookie of the flow entry that was looked up.
339 uses oxm:match-grouping;
350 grouping flow-removed {
351 reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec";
362 type oft:flow-removed-reason;
385 uses oxm:match-grouping;
388 uses oxm:match-v10-grouping;
390 grouping port-status {
391 reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec";
398 type oft:port-reason;
401 /* Controller command messages. */
402 grouping packet-out {
403 reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec";
404 /* Controller/switch message */
408 uses ofaction:actions-grouping;
416 type oft:port-number;
420 reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec";
421 /* Controller/switch message */
435 type oft:flow-mod-command;
450 type oft:port-number;
456 type oft:flow-mod-flags;
458 uses oxm:match-grouping;
460 uses ofinstruction:instructions-grouping;
464 type oft:flow-mod-flags-v10;
466 uses oxm:match-v10-grouping;
467 uses ofaction:actions-grouping;
470 reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec";
471 /* Controller/switch message */
476 type oft:group-mod-command;
485 uses buckets-grouping;
489 reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec";
490 /* Controller/switch message */
495 type oft:port-number;
498 type yang:mac-address;
501 type oft:port-config;
504 type oft:port-config;
507 type oft:port-features;
511 type oft:port-config-v10;
514 type oft:port-config-v10;
517 type oft:port-features-v10;
521 reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec";
522 /* Controller/switch message */
530 type oft:table-config;
534 /* Multipart messages. */
535 grouping multipart-request {
536 reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec";
537 /* Controller/switch message */
542 type oft:multipart-type;
545 type oft:multipart-request-flags;
547 choice multipart-request-body {
548 case multipart-request-desc-case {
549 container multipart-request-desc {
555 case multipart-request-flow-case {
556 container multipart-request-flow {
572 uses oxm:match-grouping;
575 uses oxm:match-v10-grouping;
578 case multipart-request-aggregate-case {
579 container multipart-request-aggregate {
595 uses oxm:match-grouping;
598 uses oxm:match-v10-grouping;
601 case multipart-request-table-case {
602 container multipart-request-table {
608 case multipart-request-port-stats-case {
609 container multipart-request-port-stats {
615 case multipart-request-queue-case {
616 container multipart-request-queue {
625 case multipart-request-group-case {
626 container multipart-request-group {
632 case multipart-request-group-desc-case {
633 container multipart-request-group-desc {
639 case multipart-request-group-features-case {
640 container multipart-request-group-features {
646 case multipart-request-meter-case {
647 container multipart-request-meter {
653 case multipart-request-meter-config-case {
654 container multipart-request-meter-config {
660 case multipart-request-meter-features-case {
661 container multipart-request-meter-features {
667 case multipart-request-table-features-case {
668 container multipart-request-table-features {
669 list table-features {
676 leaf metadata-match {
679 leaf metadata-write {
683 type oft:table-config;
688 uses table-features-properties-grouping;
692 case multipart-request-port-desc-case {
693 container multipart-request-port-desc {
699 case multipart-request-experimenter-case {
700 container multipart-request-experimenter {
701 uses experimenter-core;
706 grouping multipart-reply {
707 reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec";
708 /* Controller/switch message */
713 type oft:multipart-type;
716 type oft:multipart-request-flags;
718 choice multipart-reply-body {
719 case multipart-reply-desc-case {
720 container multipart-reply-desc {
738 case multipart-reply-flow-case {
739 container multipart-reply-flow {
760 type oft:flow-mod-flags;
771 uses oxm:match-grouping;
773 uses ofinstruction:instructions-grouping;
776 uses oxm:match-v10-grouping;
777 uses ofaction:actions-grouping;
781 case multipart-reply-aggregate-case {
782 container multipart-reply-aggregate {
794 case multipart-reply-table-case {
795 container multipart-reply-table {
815 type oft:flow-wildcards-v10;
829 case multipart-reply-port-stats-case {
830 container multipart-reply-port-stats {
880 case multipart-reply-queue-case {
881 container multipart-reply-queue {
907 case multipart-reply-group-case {
908 container multipart-reply-group {
939 case multipart-reply-group-desc-case {
940 container multipart-reply-group-desc {
948 uses buckets-grouping;
952 case multipart-reply-group-features-case {
953 container multipart-reply-group-features {
955 type oft:group-types;
958 type oft:group-capabilities;
960 leaf-list max_groups {
963 leaf-list actions-bitmap {
964 type oft:action-type;
968 case multipart-reply-meter-case {
969 container multipart-reply-meter {
977 leaf packet-in-count {
989 list meter-band-stats {
990 leaf packet-band-count {
993 leaf byte-band-count {
1000 case multipart-reply-meter-config-case {
1001 container multipart-reply-meter-config {
1004 type oft:meter-flags;
1010 uses meter-band-header;
1015 case multipart-reply-meter-features-case {
1016 container multipart-reply-meter-features {
1021 type oft:meter-band-type-bitmap;
1024 type oft:meter-flags;
1034 case multipart-reply-table-features-case {
1035 container multipart-reply-table-features {
1036 list table-features {
1043 leaf metadata-match {
1046 leaf metadata-write {
1050 type oft:table-config;
1055 uses table-features-properties-grouping;
1059 case multipart-reply-port-desc-case {
1060 container multipart-reply-port-desc {
1066 case multipart-reply-experimenter-case {
1067 container multipart-reply-experimenter {
1068 // empty body - used for experimenter augmentation
1073 /* Barrier messages. */
1074 grouping barrier-request {
1075 reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec";
1076 /* Controller/switch message */
1079 grouping barrier-reply {
1080 reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec";
1081 /* Controller/switch message */
1084 /* Queue Configuration messages. */
1085 grouping queue-get-config-request {
1086 reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";
1087 /* Controller/switch message */
1092 type oft:port-number;
1095 grouping queue-get-config-reply {
1096 reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";
1097 /* Controller/switch message */
1102 type oft:port-number;
1108 grouping packet-queue {
1113 type oft:port-number;
1115 uses queue-property-header;
1117 container queue-prop-container {
1118 uses queue-property-header;
1120 grouping queue-property-header {
1121 list queue-property {
1124 type oft:queue-properties;
1128 /* Controller role change request messages. */
1129 grouping role-request {
1130 reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec";
1131 /* Controller/switch message */
1136 type oft:controller-role;
1138 leaf generation-id {
1142 grouping role-reply {
1143 reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec";
1144 /* Controller/switch message */
1149 type oft:controller-role;
1151 leaf generation-id {
1155 /* Asynchronous message configuration. */
1156 grouping get-async-request {
1157 reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec";
1158 /* Controller/switch message */
1162 grouping get-async-reply {
1163 reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec";
1164 /* Controller/switch message */
1167 uses async-body-grouping;
1169 grouping set-async {
1170 reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec";
1171 /* Controller/switch message */
1174 uses async-body-grouping;
1177 grouping async-body-grouping {
1178 list packet-in-mask {
1180 type oft:packet-in-reason;
1183 list port-status-mask {
1185 type oft:port-reason;
1188 list flow-removed-mask {
1190 type oft:flow-removed-reason;
1194 /* Meters and rate limiters configuration messages. */
1195 grouping meter-mod {
1196 reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec";
1197 /* Controller/switch message */
1202 type oft:meter-mod-command;
1205 type oft:meter-flags;
1211 uses meter-band-header;
1215 container meter-band-container {
1216 uses meter-band-header;
1218 grouping meter-band-header {
1220 case meter-band-drop-case {
1221 container meter-band-drop {
1222 uses meter-band-commons;
1225 case meter-band-dscp-remark-case {
1226 container meter-band-dscp-remark {
1227 uses meter-band-commons;
1233 case meter-band-experimenter-case {
1234 container meter-band-experimenter {
1235 uses meter-band-commons;
1241 grouping meter-band-commons {
1243 type oft:meter-band-type;
1253 /* Immutable messages. */
1254 notification hello-message {
1256 reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";
1258 /* Symmetric message */
1260 notification error-message {
1262 reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";
1264 /* Symmetric message */
1266 notification echo-request-message {
1268 reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";
1270 /* Symmetric message */
1272 notification experimenter-message {
1274 reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";
1275 // TODO:: does switch send this when understood experimenter msg from lib?
1276 /* Symmetric message */
1278 // # Notification and RPCs
1279 /* Symmetric RPC. */
1284 /* Controller/switch message */
1303 description "Send experimenter message to device, reply is not solicitated.";
1305 uses experimenter-of-message;
1309 /* Switch configuration messages. */
1312 uses features-request;
1314 /* Controller/switch message */
1316 uses features-reply;
1322 uses get-config-request;
1325 uses get-config-reply;
1327 /* Controller/switch message */
1334 /* Controller/switch message */
1336 /* Asynchronous messages. */
1337 notification packet-in-message {
1342 notification flow-removed-message {
1347 notification port-status-message {
1350 } /* Async message */
1352 /* Controller command messages. */
1357 /* Controller/switch message */
1363 /* Controller/switch message */
1369 /* Controller/switch message */
1375 } /* Controller/switch message */
1381 } /* Controller/switch message */
1383 /* Multipart messages. */
1385 rpc multipart-request {
1387 uses multipart-request;
1391 /* Controller/switch message */
1392 notification multipart-reply-message {
1393 uses multipart-reply;
1394 // notification because of multiple following responses
1395 } /* Controller/switch message */
1398 /* Barrier messages. */
1401 uses barrier-request;
1407 /* Queue Configuration messages. */
1408 rpc get-queue-config {
1410 uses queue-get-config-request;
1413 uses queue-get-config-reply;
1417 /* Controller role change request messages. */
1425 } /* Controller/switch message */
1427 /* Asynchronous message configuration. */
1430 uses get-async-request;
1433 uses get-async-reply;
1436 /* Controller/switch message */
1443 /* Meters and rate limiters configuration messages. */
1448 } /* Controller/switch message */