Add yang models for bundle messages
[openflowjava.git] / openflow-protocol-api / src / main / yang / openflow-approved-extensions.yang
index d4afa880003d51ecc3b168ead51b3872833a6488..17c89408bd2f17da07a1d7531af9a87bf135475a 100644 (file)
@@ -19,6 +19,77 @@ module openflow-approved-extensions {
 
     //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;
@@ -37,4 +108,124 @@ module openflow-approved-extensions {
         }
     }
 
+    // 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