//ONF Approved OpenFlow Extensions
+ // ONF experimenter error codes
+ typedef onf-experimenter-error-code {
+ description "Error codes for experimenter error type.";
+ type enumeration {
+ enum ONFERR_ET_UNKNOWN {
+ description "Unspecified error.";
+ value 2300;
+ }
+ enum ONFERR_ET_EPERM {
+ description "Permissions error.";
+ value 2301;
+ }
+ enum ONFERR_ET_BAD_ID {
+ description "Bundle ID doesn’t exist.";
+ value 2302;
+ }
+ enum ONFERR_ET_BUNDLE_EXIST {
+ description "Bundle ID already exist.";
+ value 2303;
+ }
+ enum ONFERR_ET_BUNDLE_CLOSED {
+ description "Bundle ID is closed.";
+ value 2304;
+ }
+ enum ONFERR_ET_OUT_OF_BUNDLES {
+ description "Too many bundles IDs.";
+ value 2305;
+ }
+ enum ONFERR_ET_BAD_TYPE {
+ description "Unsupported or unknown message control type.";
+ value 2306;
+ }
+ enum ONFERR_ET_BAD_FLAGS {
+ description "Unsupported, unknown, or inconsistent flags.";
+ value 2307;
+ }
+ enum ONFERR_ET_MSG_BAD_LEN {
+ description "Length problem in included message.";
+ value 2308;
+ }
+ enum ONFERR_ET_MSG_BAD_XID {
+ description "Inconsistent or duplicate XID.";
+ value 2309;
+ }
+ enum ONFERR_ET_MSG_UNSUP {
+ description "Unsupported message in this bundle.";
+ value 2310;
+ }
+ enum ONFERR_ET_MSG_CONFLICT {
+ description "Unsupported message combination in this bundle.";
+ value 2311;
+ }
+ enum ONFERR_ET_MSG_TOO_MANY {
+ description "Can not handle this many messages in bundle.";
+ value 2312;
+ }
+ enum ONFERR_ET_MSG_FAILED {
+ description "One message in bundle failed.";
+ value 2313;
+ }
+ enum ONFERR_ET_TIMEOUT {
+ description "Bundle is taking too long.";
+ value 2314;
+ }
+ enum ONFERR_ET_BUNDLE_IN_PROGRESS {
+ description "Bundle is locking the resource.";
+ value 2315;
+ }
+ }
+ }
+
// Extension 109 - TCP FLAGS
identity tcp_flags {
base oxm:match-field;
}
}
+ // Extension 230 - Bundle Extension (experimenterID 0x4F4E4600)
+ typedef bundle-id {
+ description "Identify the bundle.";
+ type uint32;
+ }
+
+ typedef bundle-control-type {
+ description "Bundle control message type.";
+ type enumeration {
+ enum ONF_BCT_OPEN_REQUEST {
+ value 0;
+ }
+ enum ONF_BCT_OPEN_REPLY {
+ value 1;
+ }
+ enum ONF_BCT_CLOSE_REQUEST {
+ value 2;
+ }
+ enum ONF_BCT_CLOSE_REPLY {
+ value 3;
+ }
+ enum ONF_BCT_COMMIT_REQUEST {
+ value 4;
+ }
+ enum ONF_BCT_COMMIT_REPLY {
+ value 5;
+ }
+ enum ONF_BCT_DISCARD_REQUEST {
+ value 6;
+ }
+ enum ONF_BCT_DISCARD_REPLY {
+ value 7;
+ }
+ }
+ }
+
+ typedef bundle-flags {
+ description "Bundle configuration flags.";
+ type bits {
+ bit atomic {
+ description "Execute atomically.";
+ position 0;
+ }
+ bit ordered {
+ description "Execute in specified order.";
+ position 1;
+ }
+ }
+ }
+
+ typedef bundle-property-type {
+ description "Bundle property types.";
+ type enumeration {
+ enum ONF_ET_BPT_EXPERIMENTER {
+ description "Experimenter property.";
+ value 65535; //0xFFFF
+ }
+ }
+ }
+
+ grouping bundle-properties {
+ list bundle-property {
+ description "Bundle properties list.";
+ leaf type {
+ type bundle-property-type;
+ }
+ choice bundle-property-entry {
+ case bundle-experimenter-property {
+ leaf experimenter {
+ type oft:experimenter-id;
+ }
+ leaf exp-type {
+ type uint32;
+ }
+ choice bundle-experimenter-property-data {
+ // to be augmented by vendors
+ }
+ }
+ }
+ }
+ }
+
+ augment "/ofproto:experimenter/ofproto:input/ofproto:experimenter-data-of-choice" {
+ case bundle-control {
+ description "ONF_ET_BUNDLE_CONTROL message in OpenFlow Switch Extension 230.";
+ leaf bundle-id {
+ type bundle-id;
+ }
+ leaf type {
+ type bundle-control-type;
+ }
+ leaf flags {
+ type bundle-flags;
+ }
+ uses bundle-properties;
+ }
+ case bundle-add-message {
+ description "ONF_ET_BUNDLE_ADD_MESSAGE in OpenFlow Switch Extension 230.";
+ leaf bundle-id {
+ type bundle-id;
+ }
+ leaf flags {
+ type bundle-flags;
+ }
+ // Inner message
+ choice message {
+ description "Message added to the bundle.";
+ case flow-mod-case {
+ uses ofproto:flow-mod;
+ }
+ case group-mod-case {
+ uses ofproto:group-mod;
+ }
+ case port-mod-case {
+ uses ofproto:port-mod;
+ }
+ }
+ uses bundle-properties;
+ }
+ }
}
\ No newline at end of file