Initial OpenFlow 1.3 support
[cascardo/ovs.git] / lib / ofp-errors.h
index 4d17ba9..e9fedb9 100644 (file)
@@ -45,6 +45,19 @@ struct ofpbuf;
 
 #define OFPERR_OFS (1 << 30)
 
+/* OpenFlow error codes.
+ *
+ * The comments below are parsed by the extract-ofp-errors program at build
+ * time and used to determine the mapping between "enum ofperr" constants and
+ * error type/code values used in the OpenFlow protocol:
+ *
+ *   - The first part of each comment specifies OpenFlow type/code for each
+ *     protocol that supports the error.
+ *
+ *   - Additional text is a human-readable description of the meaning of each
+ *     error, used to explain the error to the user.  Any text enclosed in
+ *     square brackets is omitted; this can be used to explain rationale for
+ *     choice of error codes in the case where this is desirable. */
 enum ofperr {
 /* Expected duplications. */
 
@@ -99,18 +112,27 @@ enum ofperr {
     /* OF1.0+(1,8).  Specified buffer does not exist. */
     OFPERR_OFPBRC_BUFFER_UNKNOWN,
 
-    /* OF1.1+(1,9).  Specified table-id invalid or does not exist. */
+    /* NX1.0(1,512), OF1.1+(1,9).  Specified table-id invalid or does not exist.
+     * [ A non-standard error (1,512), formerly OFPERR_NXBRC_BAD_TABLE_ID,
+     *   is used for OpenFlow 1.0 as there seems to be no appropriste error
+     *   code defined the specification. ] */
     OFPERR_OFPBRC_BAD_TABLE_ID,
 
     /* OF1.2+(1,10).  Denied because controller is slave. */
     OFPERR_OFPBRC_IS_SLAVE,
 
-    /* OF1.2+(1,11).  Invalid port. */
+    /* NX1.0(1,514), NX1.1(1,514), OF1.2+(1,11).  Invalid port.
+     * [ A non-standard error (1,514), formerly
+     *   OFPERR_NXBRC_BAD_IN_PORT is used for OpenFlow 1.0 and 1.1 as there
+     *   seems to be no appropriste error code defined the specifications. ] */
     OFPERR_OFPBRC_BAD_PORT,
 
     /* OF1.2+(1,12).  Invalid packet in packet-out. */
     OFPERR_OFPBRC_BAD_PACKET,
 
+    /* OF1.3+(1,13).  Multipart request overflowed the assigned buffer. */
+    OFPERR_OFPBRC_MULTIPART_BUFFER_OVERFLOW,
+
     /* NX1.0+(1,256).  Invalid NXM flow match. */
     OFPERR_NXBRC_NXM_INVALID,
 
@@ -118,12 +140,6 @@ enum ofperr {
      * nxm_hasmask or nxm_length or both, is invalid or not implemented. */
     OFPERR_NXBRC_NXM_BAD_TYPE,
 
-    /* NX1.0+(1,512).  A request specified a nonexistent table ID. */
-    OFPERR_NXBRC_BAD_TABLE_ID,
-
-    /* NX1.0+(1,514).  The in_port in an ofp_packet_out request is invalid. */
-    OFPERR_NXBRC_BAD_IN_PORT,
-
     /* NX1.0+(1,515).  Must-be-zero field had nonzero value. */
     OFPERR_NXBRC_MUST_BE_ZERO,
 
@@ -268,7 +284,7 @@ enum ofperr {
     /* OF1.1+(4,6).  Unsupported field in the match. */
     OFPERR_OFPBMC_BAD_FIELD,
 
-    /* NX1.0(1,258), NX1.1(1,258), OF1.2+(4,7).  Unsupported value in a match
+    /* NX1.0(1,258), OF1.1+(4,7).  Unsupported value in a match
      * field. */
     OFPERR_OFPBMC_BAD_VALUE,
 
@@ -296,10 +312,7 @@ enum ofperr {
     /* OF1.1+(5,0).  Unspecified error. */
     OFPERR_OFPFMFC_UNKNOWN,
 
-    /* OF1.0(3,0).  Flow not added because of full tables. */
-    OFPERR_OFPFMFC_ALL_TABLES_FULL,
-
-    /* OF1.1+(5,1).  Flow not added because table was full. */
+    /* OF1.0(3,0), OF1.1+(5,1).  Flow not added because of full table(s). */
     OFPERR_OFPFMFC_TABLE_FULL,
 
     /* OF1.1+(5,2).  Table does not exist */
@@ -337,9 +350,6 @@ enum ofperr {
      * extension is enabled. */
     OFPERR_NXFMFC_BAD_TABLE_ID,
 
-    /* NX1.0+(3,258).  'out_group' specified but groups not yet supported. */
-    OFPERR_NXFMFC_GROUPS_NOT_SUPPORTED,
-
 /* ## ---------------------- ## */
 /* ## OFPET_GROUP_MOD_FAILED ## */
 /* ## ---------------------- ## */
@@ -485,6 +495,77 @@ enum ofperr {
     /* NX1.0(1,513), NX1.1(1,513), OF1.2+(11,2).  Invalid role. */
     OFPERR_OFPRRFC_BAD_ROLE,
 
+/* ## ---------------------- ## */
+/* ## OFPET_METER_MOD_FAILED ## */
+/* ## ---------------------- ## */
+
+    /* OF1.3+(12).  Error in meter. */
+    OFPERR_OFPET_METER_MOD_FAILED,
+
+    /* OF1.3+(12,0).  Unspecified error. */
+    OFPERR_OFPMMFC_UNKNOWN,
+
+    /* OF1.3+(12,1).  Meter not added because a Meter ADD attempted to
+     * replace an existing Meter. */
+    OFPERR_OFPMMFC_METER_EXISTS,
+
+    /* OF1.3+(12,2).  Meter not added because Meter specified is invalid. */
+    OFPERR_OFPMMFC_INVALID_METER,
+
+    /* OF1.3+(12,3).  Meter not modified because a Meter MODIFY attempted
+     * to modify a non-existent Meter. */
+    OFPERR_OFPMMFC_UNKNOWN_METER,
+
+    /* OF1.3+(12,4).  Unsupported or unknown command. */
+    OFPERR_OFPMMFC_BAD_COMMAND,
+
+    /* OF1.3+(12,5).  Flag configuration unsupported. */
+    OFPERR_OFPMMFC_BAD_FLAGS,
+
+    /* OF1.3+(12,6).  Rate unsupported. */
+    OFPERR_OFPMMFC_BAD_RATE,
+
+    /* OF1.3+(12,7).  Burst size unsupported. */
+    OFPERR_OFPMMFC_BAD_BURST,
+
+    /* OF1.3+(12,8).  Band unsupported. */
+    OFPERR_OFPMMFC_BAD_BAND,
+
+    /* OF1.3+(12,9).  Band value unsupported. */
+    OFPERR_OFPMMFC_BAD_BAND_VALUE,
+
+    /* OF1.3+(12,10).  No more meters available. */
+    OFPERR_OFPMMFC_OUT_OF_METERS,
+
+    /* OF1.3+(12,11).  The maximum number of properties for a meter has
+     * been exceeded. */
+    OFPERR_OFPMMFC_OUT_OF_BANDS,
+
+/* ## --------------------------- ## */
+/* ## OFPET_TABLE_FEATURES_FAILED ## */
+/* ## --------------------------- ## */
+
+    /* OF1.3+(13).  Setting table features failed. */
+    OFPERR_OFPET_TABLE_FEATURES_FAILED,
+
+    /* OF1.3+(13,0).  Specified table does not exist. */
+    OFPERR_OFPTFFC_BAD_TABLE,
+
+    /* OF1.3+(13,1).  Invalid metadata mask. */
+    OFPERR_OFPTFFC_BAD_METADATA,
+
+    /* OF1.3+(13,2).  Unknown property type. */
+    OFPERR_OFPTFFC_BAD_TYPE,
+
+    /* OF1.3+(13,3).  Length problem in properties. */
+    OFPERR_OFPTFFC_BAD_LEN,
+
+    /* OF1.3+(13,4).  Unsupported property value. */
+    OFPERR_OFPTFFC_BAD_ARGUMENT,
+
+    /* OF1.3+(13,5).  Permissions error. */
+    OFPERR_OFPTFFC_EPERM,
+
 /* ## ------------------ ## */
 /* ## OFPET_EXPERIMENTER ## */
 /* ## ------------------ ## */