1 module openflow-protocol {
\r
2 namespace "urn:opendaylight:openflow:protocol";
\r
5 import ietf-inet-types {prefix inet;}
\r
6 import ietf-yang-types {prefix yang;}
\r
8 import openflow-types {prefix oft;}
\r
9 import openflow-extensible-match { prefix oxm;}
\r
10 import openflow-instruction { prefix ofinstruction;}
\r
11 import openflow-action {prefix ofaction;}
\r
13 revision "2013-07-31" {
\r
14 description "OpenFlow 1.3 - protocol objects model";
\r
17 // Generic Structures
\r
19 // reference "ofp_port";
\r
21 // reference "ofp_port.port_no";
\r
25 // reference "ofp_port.hw_addr";
\r
26 type yang:mac-address;
\r
29 // reference "ofp_port.name";
\r
33 // reference "ofp_port.config";
\r
34 type oft:port-config;
\r
37 // reference "ofp_port.state";
\r
38 type oft:port-state;
\r
40 leaf current-features {
\r
41 description "Current features.";
\r
42 // reference "ofp_port.curr";
\r
43 type oft:port-features;
\r
45 leaf advertised-features {
\r
46 description "Features being advertised by the port.";
\r
47 // reference "ofp_port.advertised";
\r
48 type oft:port-features;
\r
50 leaf supported-features {
\r
51 description "Features supported by the port.";
\r
52 // reference "ofp_port.supported";
\r
53 type oft:port-features;
\r
55 leaf peer-features {
\r
56 description "Features advertised by peer.";
\r
57 // reference "ofp_port.peer";
\r
58 type oft:port-features;
\r
61 description "Current port bitrate in kbps.";
\r
62 // reference "ofp_port.curr_speed";
\r
67 description "Max port bitrate in kbps";
\r
68 // reference "ofp_port.max_speed";
\r
77 base oft:match-type-base;
\r
80 uses oxm:oxm-fields;
\r
94 type oft:port-number;
\r
100 uses ofaction:actions;
\r
103 container table-features-properties-container {
\r
104 uses table-features-properties;
\r
107 grouping table-features-properties {
\r
108 list table-feature-properties {
\r
110 type oft:table-features-prop-type;
\r
115 // TODO: ofp_packet_queue
\r
117 // # MESSAGE Structures
\r
118 /* Immutable messages. */
\r
119 grouping ofHeader {
\r
120 //reference "ofpt_header struct in Openflow Switch 1.3 Spec"
\r
123 //reference "OpenFlow Header - OFP_VERSION";
\r
127 //reference "OpenFlow Header - transaction id";
\r
130 grouping ofHelloElementHeader {
\r
131 //reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"
\r
133 type oft:hello-element-type;
\r
134 //reference "OpenFlow Header element type - OFPHET_*";
\r
138 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
\r
139 /* Symmetric message */
\r
143 uses ofHelloElementHeader;
\r
145 leaf-list version-bitmap {
\r
155 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
\r
156 /* Symmetric message */
\r
160 type oft:error-type;
\r
169 grouping echo-request {
\r
170 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
171 /* Symmetric message */
\r
178 grouping echo-reply {
\r
179 // reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
\r
180 /* Symmetric message */
\r
187 grouping experimenter {
\r
188 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
\r
189 /* Symmetric message */
\r
192 leaf experimenter {
\r
202 /* Switch configuration messages. */
\r
203 grouping features-request {
\r
204 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
\r
205 /* Controller/switch message */
\r
208 grouping features-reply {
\r
209 // reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
\r
210 /* Controller/switch message */
\r
225 leaf capabilities {
\r
232 grouping get-config-request {
\r
233 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
234 /* Controller/switch message */
\r
237 grouping get-config-reply {
\r
238 // reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
\r
239 /* Controller/switch message */
\r
243 type oft:switch-config-flag;
\r
245 leaf miss-send-len {
\r
249 grouping set-config {
\r
250 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
\r
251 /* Controller/switch message */
\r
256 type oft:switch-config-flag;
\r
258 leaf miss-send-len {
\r
262 /* Asynchronous messages. */
\r
263 grouping packet-in {
\r
264 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
\r
265 /* Async message */
\r
270 // ID assigned by datapath.
\r
274 // Full length of frame.
\r
278 // Reason packet is being sent (one of OFPR_*)
\r
282 // ID of the table that was looked up
\r
286 // Cookie of the flow entry that was looked up.
\r
293 // struct ofp_match match; /* Packet metadata. Variable size. */
\r
294 // /* The variable size and padded match is always followed by:
\r
295 // * - Exactly 2 all-zero padding bytes, then
\r
296 // * - An Ethernet frame whose length is inferred from header.length.
\r
297 // * The padding bytes preceding the Ethernet frame ensure that the IP
\r
298 // * header (if any) following the Ethernet header is 32-bit aligned.
\r
305 grouping flow-removed {
\r
306 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
\r
307 /* Async message */
\r
317 type oft:flow-removed-reason;
\r
322 leaf duration-sec {
\r
325 leaf duration-nsec {
\r
328 leaf idle-timeout {
\r
331 leaf hard-timeout {
\r
334 leaf packet-count {
\r
344 grouping port-status {
\r
345 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
\r
352 type oft:port-reason;
\r
354 } /* Async message */
\r
355 /* Controller command messages. */
\r
356 grouping packet-out {
\r
357 // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
\r
358 /* Controller/switch message */
\r
362 uses ofaction:actions;
\r
371 type oft:port-number;
\r
374 grouping flow-mod {
\r
375 // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
\r
376 /* Controller/switch message */
\r
390 type oft:flow-mod-command;
\r
392 leaf idle-timeout {
\r
395 leaf hard-timeout {
\r
405 type oft:port-number;
\r
411 type oft:flow-mod-flags;
\r
417 uses ofinstruction:instructions;
\r
419 grouping group-mod {
\r
420 // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
\r
421 /* Controller/switch message */
\r
426 type oft:group-mod-command;
\r
429 type oft:group-type;
\r
438 grouping port-mod {
\r
439 // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
\r
440 /* Controller/switch message */
\r
445 type oft:port-number;
\r
448 type yang:mac-address;
\r
451 type oft:port-config;
\r
454 type oft:port-config;
\r
457 type oft:port-features;
\r
460 grouping table-mod {
\r
461 // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
\r
462 /* Controller/switch message */
\r
470 type oft:port-config;
\r
474 /* Multipart messages. */
\r
475 grouping multipart-request {
\r
476 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
\r
477 /* Controller/switch message */
\r
482 type oft:multipart-type;
\r
485 type oft:multipart-request-flags;
\r
487 choice multipart-request-body {
\r
488 case multipart-request-flow {
\r
508 case multipart-request-aggregate {
\r
528 case multipart-request-port-stats {
\r
533 case multipart-request-queue {
\r
541 case multipart-request-group {
\r
546 case multipart-request-meter {
\r
551 case multipart-request-meter-config {
\r
556 case multipart-request-table-features {
\r
557 list table-features {
\r
564 leaf metadata-match {
\r
567 leaf metadata-write {
\r
571 type oft:table-config;
\r
576 uses table-features-properties;
\r
579 case multipart-request-experimenter {
\r
580 leaf experimenter {
\r
589 grouping multipart-reply {
\r
590 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
\r
591 /* Controller/switch message */
\r
596 type oft:multipart-type;
\r
599 type oft:multipart-request-flags;
\r
601 choice multipart-reply-body {
\r
602 case multipart-reply-desc {
\r
619 case multipart-reply-flow {
\r
624 leaf duration-sec {
\r
627 leaf duration-nsec {
\r
633 leaf idle-timeout {
\r
636 leaf hard-timeout {
\r
640 type oft:flow-mod-flags;
\r
645 leaf packet-count {
\r
655 uses ofinstruction:instructions;
\r
658 case multipart-reply-aggregate {
\r
659 leaf packet-count {
\r
669 case multipart-reply-table {
\r
674 leaf active-count {
\r
677 leaf lookup-count {
\r
680 leaf matched-count {
\r
685 case multipart-reply-port-stats {
\r
714 leaf rx-frame-err {
\r
726 leaf duration-sec {
\r
729 leaf duration-nsec {
\r
734 case multipart-reply-queue {
\r
751 leaf duration-sec {
\r
754 leaf duration-nsec {
\r
759 case multipart-reply-group {
\r
767 leaf packet-count {
\r
773 leaf duration-sec {
\r
776 leaf duration-nsec {
\r
779 list bucket-stats {
\r
780 leaf packet-count {
\r
789 case multipart-reply-group-desc {
\r
793 type oft:group-type;
\r
801 case multipart-reply-group-features {
\r
803 type oft:group-types;
\r
805 leaf capabilities {
\r
806 type oft:group-capabilities;
\r
808 leaf-list max_groups {
\r
812 uses ofaction:actions;
\r
814 case multipart-reply-meter {
\r
822 leaf packet-in-count {
\r
825 leaf byte-in-count {
\r
828 leaf duration-sec {
\r
831 leaf duration-nsec {
\r
834 list meter-band-stats {
\r
835 leaf packet-band-count {
\r
838 leaf byte-band-count {
\r
844 case multipart-reply-meter-config {
\r
845 list meter-config {
\r
847 type oft:meter-mod-command;
\r
853 uses meter-band-header;
\r
857 case multipart-reply-meter-features {
\r
862 type oft:meter-band-type;
\r
864 leaf capabilities {
\r
865 type oft:meter-flags;
\r
874 case multipart-reply-table-features {
\r
875 list table-features {
\r
882 leaf metadata-match {
\r
885 leaf metadata-write {
\r
889 type oft:port-config;
\r
894 uses table-features-properties;
\r
897 case multipart-reply-port-desc {
\r
902 case multipart-reply-experimenter {
\r
903 leaf experimenter {
\r
915 /* Barrier messages. */
\r
916 grouping barrier-request {
\r
917 // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
\r
918 /* Controller/switch message */
\r
921 grouping barrier-reply {
\r
922 // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
\r
923 /* Controller/switch message */
\r
926 /* Queue Configuration messages. */
\r
927 grouping queue-get-config-request {
\r
928 // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
929 /* Controller/switch message */
\r
934 type oft:port-number;
\r
937 grouping queue-get-config-reply {
\r
938 // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
\r
939 /* Controller/switch message */
\r
944 type oft:port-number;
\r
950 grouping packet-queue {
\r
955 type oft:port-number;
\r
958 uses queue-property-header;
\r
961 grouping queue-property-header {
\r
963 type oft:queue-property;
\r
966 /* Controller role change request messages. */
\r
967 grouping role-request {
\r
968 // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
\r
969 /* Controller/switch message */
\r
974 type oft:controller-role;
\r
976 leaf generation-id {
\r
980 grouping role-reply {
\r
981 // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
\r
982 /* Controller/switch message */
\r
987 type oft:controller-role;
\r
989 leaf generation-id {
\r
993 /* Asynchronous message configuration. */
\r
994 grouping get-async-request {
\r
995 // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
\r
996 /* Controller/switch message */
\r
1000 grouping get-async-reply {
\r
1001 // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
\r
1002 /* Controller/switch message */
\r
1006 list packet-in-mask {
\r
1008 type oft:packet-in-reason;
\r
1011 list port-status-mask {
\r
1013 type oft:port-reason;
\r
1016 list flow-removed-mask {
\r
1018 type oft:flow-removed-reason;
\r
1022 grouping set-async {
\r
1023 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
\r
1024 /* Controller/switch message */
\r
1028 leaf-list packet-in-mask {
\r
1029 type oft:packet-in-reason;
\r
1031 leaf-list port-status-mask {
\r
1032 type oft:port-reason;
\r
1034 leaf-list flow-removed-mask {
\r
1035 type oft:flow-removed-reason;
\r
1038 /* Meters and rate limiters configuration messages. */
\r
1039 grouping meter-mod {
\r
1040 // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
\r
1041 /* Controller/switch message */
\r
1046 type oft:meter-mod-command;
\r
1049 type oft:meter-flags;
\r
1052 type oft:meter-id;
\r
1055 uses meter-band-header;
\r
1059 grouping meter-band-header {
\r
1060 choice meter-band {
\r
1061 case meter-band-drop {
\r
1062 uses meter-band-commons;
\r
1064 case meter-band-dscp-remark {
\r
1065 uses meter-band-commons;
\r
1070 case meter-band-experimenter {
\r
1071 uses meter-band-commons;
\r
1072 leaf experimenter {
\r
1079 grouping meter-band-commons {
\r
1081 type oft:meter-band-type;
\r
1091 /* Immutable messages. */
\r
1092 notification hello-message {
\r
1094 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
\r
1096 /* Symmetric message */
\r
1098 notification error-message {
\r
1100 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
\r
1102 /* Symmetric message */
\r
1104 notification echo-request-message {
\r
1105 uses echo-request;
\r
1106 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
1108 /* Symmetric message */
\r
1110 notification experimenter-message {
\r
1111 uses experimenter;
\r
1112 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
\r
1113 // TODO:: does switch send this when understood experimenter msg from lib?
\r
1114 /* Symmetric message */
\r
1116 // # Notification and RPCs
\r
1117 /* Symmetric RPC. */
\r
1119 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
1121 uses echo-request;
\r
1123 /* Controller/switch message */
\r
1130 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
1137 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
\r
1143 rpc experimenter {
\r
1144 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
\r
1146 uses experimenter;
\r
1150 /* Switch configuration messages. */
\r
1151 rpc get-features {
\r
1152 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
\r
1154 uses features-request;
\r
1156 /* Controller/switch message */
\r
1158 uses features-reply;
\r
1163 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
1165 uses get-config-request;
\r
1168 uses get-config-reply;
\r
1170 /* Controller/switch message */
\r
1174 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
\r
1178 /* Controller/switch message */
\r
1180 /* Asynchronous messages. */
\r
1181 notification packet-in-message {
\r
1183 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
\r
1185 /* Async message */
\r
1187 notification flow-removed-message {
\r
1188 uses flow-removed;
\r
1189 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
\r
1191 /* Async message */
\r
1193 notification port-status-message {
\r
1195 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
\r
1197 } /* Async message */
\r
1199 /* Controller command messages. */
\r
1203 // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
\r
1205 /* Controller/switch message */
\r
1210 // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
\r
1212 /* Controller/switch message */
\r
1217 // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
\r
1219 /* Controller/switch message */
\r
1224 // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
\r
1226 } /* Controller/switch message */
\r
1231 // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
\r
1233 } /* Controller/switch message */
\r
1235 /* Multipart messages. */
\r
1236 //FIXME: Arent this wire protocol specific?
\r
1238 notification multipart-request-message {
\r
1239 uses multipart-request;
\r
1240 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
\r
1242 } /* Controller/switch message */
\r
1243 notification multipart-reply-message {
\r
1244 uses multipart-reply;
\r
1245 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
\r
1247 } /* Controller/switch message */
\r
1250 /* Barrier messages. */
\r
1253 uses barrier-request;
\r
1254 // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
\r
1257 uses barrier-reply;
\r
1258 // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
\r
1261 /* Queue Configuration messages. */
\r
1262 rpc get-queue-config {
\r
1264 uses queue-get-config-request;
\r
1265 // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
1268 uses queue-get-config-reply;
\r
1269 // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
\r
1273 /* Controller role change request messages. */
\r
1274 rpc role-request {
\r
1276 uses role-request;
\r
1277 // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
\r
1281 // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
\r
1283 } /* Controller/switch message */
\r
1285 /* Asynchronous message configuration. */
\r
1288 uses get-async-request;
\r
1289 // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
\r
1292 uses get-async-reply;
\r
1293 // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
\r
1296 /* Controller/switch message */
\r
1300 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
\r
1304 /* Meters and rate limiters configuration messages. */
\r
1308 // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
\r
1310 } /* Controller/switch message */
\r