1 module openflow-protocol {
\r
2 namespace "urn:opendaylight:openflow:protocol";
\r
6 import ietf-inet-types {prefix inet;}
\r
7 import ietf-yang-types {prefix yang;}
\r
9 import openflow-types {prefix oft;}
\r
10 import openflow-extensible-match { prefix oxm;}
\r
11 import openflow-instruction { prefix ofinstruction;}
\r
12 import openflow-action {prefix ofaction;}
\r
16 revision "2013-07-31" {
\r
17 description "Initial model";
\r
20 // Generic Structures
\r
23 // reference "ofp_port";
\r
25 // reference "ofp_port.port_no";
\r
29 // reference "ofp_port.hw_addr";
\r
30 type yang:mac-address;
\r
33 // reference "ofp_port.name";
\r
37 // reference "ofp_port.config";
\r
38 type oft:port-config;
\r
41 // reference "ofp_port.state";
\r
42 type oft:port-state;
\r
44 leaf current-features {
\r
45 description "Current features.";
\r
46 // reference "ofp_port.curr";
\r
47 type oft:port-features;
\r
49 leaf advertised-features {
\r
50 description "Features being advertised by the port.";
\r
51 // reference "ofp_port.advertised";
\r
52 type oft:port-features;
\r
54 leaf supported-features {
\r
55 description "Features supported by the port.";
\r
56 // reference "ofp_port.supported";
\r
57 type oft:port-features;
\r
59 leaf peer-features {
\r
60 description "Features advertised by peer.";
\r
61 // reference "ofp_port.peer";
\r
62 type oft:port-features;
\r
65 description "Current port bitrate in kbps.";
\r
66 // reference "ofp_port.curr_speed";
\r
71 description "Max port bitrate in kbps";
\r
72 // reference "ofp_port.max_speed";
\r
78 // TODO: ofp_packat_queue
\r
80 // # MESSAGE Structures
\r
81 /* Immutable messages. */
\r
83 //reference "ofpt_header struct in Openflow Switch 1.3 Spec"
\r
86 //reference "OpenFlow Header - OFP_VERSION";
\r
90 //reference "OpenFlow Header - transaction id";
\r
93 grouping ofHelloElementHeader {
\r
94 //reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"
\r
96 type oft:hello-element-type;
\r
97 //reference "OpenFlow Header element type - OFPHET_*";
\r
101 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
\r
102 /* Symmetric message */
\r
106 uses ofHelloElementHeader;
\r
114 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
\r
115 /* Symmetric message */
\r
119 type oft:error-type;
\r
128 grouping echo-request {
\r
129 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
130 /* Symmetric message */
\r
137 grouping echo-reply {
\r
138 // reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"
\r
139 /* Symmetric message */
\r
146 grouping experimenter {
\r
147 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
\r
148 /* Symmetric message */
\r
151 leaf experimenter {
\r
158 /* Switch configuration messages. */
\r
159 grouping features-request {
\r
160 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
\r
161 /* Controller/switch message */
\r
164 grouping features-reply {
\r
165 // reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"
\r
166 /* Controller/switch message */
\r
181 leaf capabilities {
\r
188 grouping get-config-request {
\r
189 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
190 /* Controller/switch message */
\r
193 grouping get-config-reply {
\r
194 // reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
\r
195 /* Controller/switch message */
\r
199 type oft:switch-config-flag;
\r
201 leaf miss-send-len {
\r
205 grouping set-config {
\r
206 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
\r
207 /* Controller/switch message */
\r
212 type oft:switch-config-flag;
\r
214 leaf miss-send-len {
\r
218 /* Asynchronous messages. */
\r
219 grouping packet-in {
\r
220 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
\r
221 /* Async message */
\r
226 // ID assigned by datapath.
\r
230 // Full length of frame.
\r
234 // Reason packet is being sent (one of OFPR_*)
\r
238 // ID of the table that was looked up
\r
242 // Cookie of the flow entry that was looked up.
\r
246 //TODO:: add match leaf
\r
251 // struct ofp_match match; /* Packet metadata. Variable size. */
\r
252 // /* The variable size and padded match is always followed by:
\r
253 // * - Exactly 2 all-zero padding bytes, then
\r
254 // * - An Ethernet frame whose length is inferred from header.length.
\r
255 // * The padding bytes preceding the Ethernet frame ensure that the IP
\r
256 // * header (if any) following the Ethernet header is 32-bit aligned.
\r
263 grouping flow-removed {
\r
264 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
\r
265 /* Async message */
\r
275 type oft:flow-removed-reason;
\r
280 leaf duration-sec {
\r
283 leaf duration-nsec {
\r
286 leaf idle-timeout {
\r
289 leaf hard-timeout {
\r
292 leaf packet-count {
\r
298 //TODO:: add match leaf
\r
303 grouping port-status {
\r
304 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
\r
311 type oft:port-reason;
\r
313 } /* Async message */
\r
314 /* Controller command messages. */
\r
315 grouping packet-out {
\r
316 // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
\r
317 /* Controller/switch message */
\r
322 uses ofaction:action-header;
\r
333 type oft:port-number;
\r
336 grouping flow-mod {
\r
337 // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
\r
338 /* Controller/switch message */
\r
352 type oft:flow-mod-command;
\r
354 leaf idle-timeout {
\r
357 leaf hard-timeout {
\r
367 type oft:port-number;
\r
375 //TODO:: add match leaf
\r
377 grouping group-mod {
\r
378 // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
\r
379 /* Controller/switch message */
\r
384 type oft:group-mod-command;
\r
387 type oft:group-type;
\r
402 type oft:port-number;
\r
409 uses ofaction:action-header;
\r
412 grouping port-mod {
\r
413 // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
\r
414 /* Controller/switch message */
\r
419 type oft:port-number;
\r
422 type yang:mac-address;
\r
425 type oft:port-config;
\r
428 type oft:port-config;
\r
431 type oft:port-features;
\r
434 grouping table-mod {
\r
435 // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
\r
436 /* Controller/switch message */
\r
444 type oft:port-config;
\r
448 /* Multipart messages. */
\r
449 grouping multipart-request {
\r
450 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
\r
451 /* Controller/switch message */
\r
456 type oft:multipart-type;
\r
459 type oft:multipart-request-flags;
\r
461 choice multipart-request-body {
\r
462 case multipart-request-flow {
\r
480 base oft:match-type-base;
\r
484 case multipart-request-aggregate {
\r
502 base oft:match-type-base;
\r
506 case multipart-request-port-stats {
\r
511 case multipart-request-queue {
\r
519 case multipart-request-group {
\r
524 case multipart-request-meter {
\r
529 case multipart-request-meter-config {
\r
534 case multipart-request-table-features {
\r
535 list table_features {
\r
542 leaf metadata-match {
\r
545 leaf metadata-write {
\r
549 type oft:table-config;
\r
556 case multipart-request-experimenter {
\r
557 leaf experimenter {
\r
566 grouping multipart-reply {
\r
567 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
\r
568 /* Controller/switch message */
\r
573 type oft:multipart-type;
\r
576 type oft:multipart-request-flags;
\r
578 choice multipart-reply-body {
\r
579 case multipart-reply-desc {
\r
596 case multipart-reply-flow {
\r
601 leaf duration-sec {
\r
604 leaf duration-nsec {
\r
610 leaf idle-timeout {
\r
613 leaf hard-timeout {
\r
622 leaf packet-count {
\r
633 case multipart-reply-aggregate {
\r
634 leaf packet-count {
\r
644 case multipart-reply-table {
\r
649 leaf active-count {
\r
652 leaf lookup-count {
\r
655 leaf matched-count {
\r
660 case multipart-reply-port-stats {
\r
689 leaf rx-frame-err {
\r
701 leaf duration-sec {
\r
704 leaf duration-nsec {
\r
709 case multipart-reply-queue {
\r
726 leaf duration-sec {
\r
729 leaf duration-nsec {
\r
734 case multipart-reply-group {
\r
742 leaf packet-count {
\r
748 leaf duration-sec {
\r
751 leaf duration-nsec {
\r
754 list bucket-stats {
\r
755 leaf packet-count {
\r
764 case multipart-reply-group-desc {
\r
777 case multipart-reply-group-features {
\r
779 type oft:group-types;
\r
781 leaf capabilities {
\r
782 type oft:group-capabilities;
\r
784 leaf-list max_groups {
\r
787 leaf-list actions {
\r
788 type ofaction:action-type;
\r
791 case multipart-reply-meter {
\r
799 leaf packet-in-count {
\r
802 leaf byte-in-count {
\r
805 leaf duration-sec {
\r
808 leaf duration-nsec {
\r
811 list meter-band-stats {
\r
812 leaf packet-band-count {
\r
815 leaf byte-band-count {
\r
821 case multipart-reply-meter-config {
\r
822 list meter-config {
\r
824 type oft:meter-mod-command;
\r
830 uses meter-band-header;
\r
834 case multipart-reply-meter-features {
\r
839 type oft:meter-band-type;
\r
841 leaf capabilities {
\r
842 type oft:meter-flags;
\r
851 case multipart-reply-table-features {
\r
852 list table-features {
\r
859 leaf metadata-match {
\r
862 leaf metadata-write {
\r
866 type oft:port-config;
\r
873 case multipart-reply-port-desc {
\r
878 case multipart-reply-experimenter {
\r
879 leaf experimenter {
\r
888 /* Barrier messages. */
\r
889 grouping barrier-request {
\r
890 // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
\r
891 /* Controller/switch message */
\r
894 grouping barrier-reply {
\r
895 // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
\r
896 /* Controller/switch message */
\r
899 /* Queue Configuration messages. */
\r
900 grouping queue-get-config-request {
\r
901 // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
902 /* Controller/switch message */
\r
907 type oft:port-number;
\r
910 grouping queue-get-config-reply {
\r
911 // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
\r
912 /* Controller/switch message */
\r
917 type oft:port-number;
\r
923 grouping packet-queue {
\r
928 type oft:port-number;
\r
931 uses queue-property-header;
\r
934 grouping queue-property-header {
\r
936 type oft:queue-property;
\r
939 /* Controller role change request messages. */
\r
940 grouping role-request {
\r
941 // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
\r
942 /* Controller/switch message */
\r
947 type oft:controller-role;
\r
949 leaf generation-id {
\r
953 grouping role-reply {
\r
954 // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
\r
955 /* Controller/switch message */
\r
960 type oft:controller-role;
\r
962 leaf generation-id {
\r
966 /* Asynchronous message configuration. */
\r
967 grouping get-async-request {
\r
968 // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
\r
969 /* Controller/switch message */
\r
973 grouping get-async-reply {
\r
974 // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
\r
975 /* Controller/switch message */
\r
979 list packet-in-mask {
\r
981 type oft:packet-in-reason;
\r
984 list port-status-mask {
\r
986 type oft:port-reason;
\r
989 list flow-removed-mask {
\r
991 type oft:flow-removed-reason;
\r
995 grouping set-async {
\r
996 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
\r
997 /* Controller/switch message */
\r
1001 leaf-list packet-in-mask {
\r
1002 type oft:packet-in-reason;
\r
1004 leaf-list port-status-mask {
\r
1005 type oft:port-reason;
\r
1007 leaf-list flow-removed-mask {
\r
1008 type oft:flow-removed-reason;
\r
1011 /* Meters and rate limiters configuration messages. */
\r
1012 grouping meter-mod {
\r
1013 // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
\r
1014 /* Controller/switch message */
\r
1019 type oft:meter-mod-command;
\r
1022 type oft:meter-flags;
\r
1025 type oft:meter-id;
\r
1028 uses meter-band-header;
\r
1032 grouping meter-band-header {
\r
1034 type oft:meter-band-type;
\r
1046 /* Immutable messages. */
\r
1047 notification hello-message {
\r
1049 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
\r
1051 /* Symmetric message */
\r
1053 notification error-message {
\r
1055 // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"
\r
1057 /* Symmetric message */
\r
1059 notification echo-request-message {
\r
1060 uses echo-request;
\r
1061 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
1063 /* Symmetric message */
\r
1065 notification experimenter-message {
\r
1066 uses experimenter;
\r
1067 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
\r
1068 // TODO:: does switch send this when understood experimenter msg from lib?
\r
1069 /* Symmetric message */
\r
1071 // # Notification and RPCs
\r
1072 /* Symmetric RPC. */
\r
1074 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
1076 uses echo-request;
\r
1078 /* Controller/switch message */
\r
1085 // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"
\r
1092 // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"
\r
1098 rpc experimenter {
\r
1099 // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"
\r
1101 uses experimenter;
\r
1105 /* Switch configuration messages. */
\r
1106 rpc get-features {
\r
1107 // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"
\r
1109 uses features-request;
\r
1111 /* Controller/switch message */
\r
1113 uses features-reply;
\r
1118 // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
1120 uses get-config-request;
\r
1123 uses get-config-reply;
\r
1125 /* Controller/switch message */
\r
1129 // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"
\r
1133 /* Controller/switch message */
\r
1135 /* Asynchronous messages. */
\r
1136 notification packet-in-message {
\r
1138 // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"
\r
1140 /* Async message */
\r
1142 notification flow-removed-message {
\r
1143 uses flow-removed;
\r
1144 // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"
\r
1146 /* Async message */
\r
1148 notification port-status-message {
\r
1150 // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"
\r
1152 } /* Async message */
\r
1154 /* Controller command messages. */
\r
1158 // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"
\r
1160 /* Controller/switch message */
\r
1165 // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"
\r
1167 /* Controller/switch message */
\r
1172 // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"
\r
1174 /* Controller/switch message */
\r
1179 // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"
\r
1181 } /* Controller/switch message */
\r
1186 // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"
\r
1188 } /* Controller/switch message */
\r
1190 /* Multipart messages. */
\r
1191 //FIXME: Arent this wire protocol specific?
\r
1193 notification multipart-request-message {
\r
1194 uses multipart-request;
\r
1195 // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"
\r
1197 } /* Controller/switch message */
\r
1198 notification multipart-reply-message {
\r
1199 uses multipart-reply;
\r
1200 // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"
\r
1202 } /* Controller/switch message */
\r
1205 /* Barrier messages. */
\r
1208 uses barrier-request;
\r
1209 // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"
\r
1212 uses barrier-reply;
\r
1213 // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"
\r
1216 /* Queue Configuration messages. */
\r
1217 rpc get-queue-config {
\r
1219 uses queue-get-config-request;
\r
1220 // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"
\r
1223 uses queue-get-config-reply;
\r
1224 // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"
\r
1228 /* Controller role change request messages. */
\r
1229 rpc role-request {
\r
1231 uses role-request;
\r
1232 // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"
\r
1236 // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"
\r
1238 } /* Controller/switch message */
\r
1240 /* Asynchronous message configuration. */
\r
1243 uses get-async-request;
\r
1244 // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"
\r
1247 uses get-async-reply;
\r
1248 // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"
\r
1251 /* Controller/switch message */
\r
1255 // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"
\r
1259 /* Meters and rate limiters configuration messages. */
\r
1263 // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"
\r
1265 } /* Controller/switch message */
\r