2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

ofp-errors: Implement OpenFlow 1.2+ experimenter error codes.

OpenFlow 1.2 standardized experimenter error codes in a way different from
the Nicira extension.  This commit implements the OpenFlow 1.2+ version.

This commit also makes it easy to add error codes for new experimenter IDs
by adding new *_VENDOR_ID definitions to openflow-common.h.

Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Ben Pfaff
2013-06-24 13:49:40 -07:00
parent 638a19b045
commit 514887ee46
10 changed files with 371 additions and 208 deletions

View File

@@ -51,8 +51,22 @@ struct ofpbuf;
* 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.
* - The first part of each comment specifies the vendor, OpenFlow versions,
* type, and sometimes a code for each protocol that supports the error:
*
* # The vendor is OF for standard OpenFlow error codes. Otherwise it
* is one of the *_VENDOR_ID codes defined in openflow-common.h.
*
* # The version can specify a specific OpenFlow version, a version
* range delimited by "-", or an open-ended range with "+".
*
* # Standard OpenFlow errors have both a type and a code. Extension
* errors generally have only a type, no code. There is one
* exception: Nicira extension (NX) errors for OpenFlow 1.0 and 1.1
* have both a type and a code. (This means that the version
* specification for NX errors may not include version 1.0 or 1.1 (or
* both) along with version 1.2 or later, because the requirements
* for those versions are different.)
*
* - 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
@@ -61,7 +75,7 @@ struct ofpbuf;
enum ofperr {
/* Expected duplications. */
/* Expected: 3,5 in OF1.1 means both OFPBIC_BAD_EXPERIMENTER and
/* Expected: 0x0,3,5 in OF1.1 means both OFPBIC_BAD_EXPERIMENTER and
* OFPBIC_BAD_EXP_TYPE. */
/* ## ------------------ ## */
@@ -115,10 +129,10 @@ enum ofperr {
/* OF1.2+(1,10). Denied because controller is slave. */
OFPERR_OFPBRC_IS_SLAVE,
/* 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 appropriate error code defined the specifications. ] */
/* NX1.0-1.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 appropriate error code defined the
* specifications. ] */
OFPERR_OFPBRC_BAD_PORT,
/* OF1.2+(1,12). Invalid packet in packet-out. */
@@ -127,41 +141,43 @@ enum ofperr {
/* OF1.3+(1,13). Multipart request overflowed the assigned buffer. */
OFPERR_OFPBRC_MULTIPART_BUFFER_OVERFLOW,
/* NX1.0+(1,256). Invalid NXM flow match. */
/* NX1.0-1.1(1,256), NX1.2+(2). Invalid NXM flow match. */
OFPERR_NXBRC_NXM_INVALID,
/* NX1.0+(1,257). The nxm_type, or nxm_type taken in combination with
* nxm_hasmask or nxm_length or both, is invalid or not implemented. */
/* NX1.0-1.1(1,257), NX1.2+(3). The nxm_type, or nxm_type taken in
* combination with nxm_hasmask or nxm_length or both, is invalid or not
* implemented. */
OFPERR_NXBRC_NXM_BAD_TYPE,
/* NX1.0+(1,515). Must-be-zero field had nonzero value. */
/* NX1.0-1.1(1,515), NX1.2+(4). Must-be-zero field had nonzero value. */
OFPERR_NXBRC_MUST_BE_ZERO,
/* NX1.0+(1,516). The reason in an ofp_port_status message is not
* valid. */
/* NX1.0-1.1(1,516), NX1.2+(5). The reason in an ofp_port_status message
* is not valid. */
OFPERR_NXBRC_BAD_REASON,
/* NX1.0+(1,517). The 'id' in an NXST_FLOW_MONITOR request is the same as
* an existing monitor id (or two monitors in the same NXST_FLOW_MONITOR
* request have the same 'id'). */
/* NX1.0-1.1(1,517), NX1.2+(6). The 'id' in an NXST_FLOW_MONITOR request
* is the same as an existing monitor id (or two monitors in the same
* NXST_FLOW_MONITOR request have the same 'id'). */
OFPERR_NXBRC_FM_DUPLICATE_ID,
/* NX1.0+(1,518). The 'flags' in an NXST_FLOW_MONITOR request either does
* not specify at least one of the NXFMF_ADD, NXFMF_DELETE, or NXFMF_MODIFY
* flags, or specifies a flag bit that is not defined. */
/* NX1.0-1.1(1,518), NX1.2+(7). The 'flags' in an NXST_FLOW_MONITOR
* request either does not specify at least one of the NXFMF_ADD,
* NXFMF_DELETE, or NXFMF_MODIFY flags, or specifies a flag bit that is not
* defined. */
OFPERR_NXBRC_FM_BAD_FLAGS,
/* NX1.0+(1,519). The 'id' in an NXT_FLOW_MONITOR_CANCEL request is not
* the id of any existing monitor. */
/* NX1.0-1.1(1,519), NX1.2+(8). The 'id' in an NXT_FLOW_MONITOR_CANCEL
* request is not the id of any existing monitor. */
OFPERR_NXBRC_FM_BAD_ID,
/* NX1.0+(1,520). The 'event' in an NXST_FLOW_MONITOR reply does not
* specify one of the NXFME_ABBREV, NXFME_ADD, NXFME_DELETE, or
/* NX1.0-1.1(1,520), NX1.2+(9). The 'event' in an NXST_FLOW_MONITOR reply
* does not specify one of the NXFME_ABBREV, NXFME_ADD, NXFME_DELETE, or
* NXFME_MODIFY. */
OFPERR_NXBRC_FM_BAD_EVENT,
/* NX1.0+(1,521). The error that occurred cannot be represented in this
* OpenFlow version. */
/* NX1.0-1.1(1,521), NX1.2+(10). The error that occurred cannot be
* represented in this OpenFlow version. */
OFPERR_NXBRC_UNENCODABLE_ERROR,
/* ## ---------------- ## */
@@ -217,7 +233,8 @@ enum ofperr {
/* OF1.2+(2,15). Bad argument in SET_FIELD action. */
OFPERR_OFPBAC_ARGUMENT,
/* NX1.0+(2,256). Must-be-zero action argument had nonzero value. */
/* NX1.0-1.1(2,256), NX1.2+(11). Must-be-zero action argument had nonzero
* value. */
OFPERR_NXBAC_MUST_BE_ZERO,
/* ## --------------------- ## */
@@ -282,15 +299,14 @@ enum ofperr {
* field. */
OFPERR_OFPBMC_BAD_VALUE,
/* NX1.0(1,259), NX1.1(1,259), OF1.2+(4,8). Unsupported mask specified in
* the match, field is not dl-address or nw-address. */
/* NX1.0-1.1(1,259), OF1.2+(4,8). Unsupported mask specified in the match,
* field is not dl-address or nw-address. */
OFPERR_OFPBMC_BAD_MASK,
/* NX1.0(1,260), NX1.1(1,260), OF1.2+(4,9). A prerequisite was not met. */
/* NX1.0-1.1(1,260), OF1.2+(4,9). A prerequisite was not met. */
OFPERR_OFPBMC_BAD_PREREQ,
/* NX1.0(1,261), NX1.1(1,261), OF1.2+(4,10). A field type was
* duplicated. */
/* NX1.0-1.1(1,261), OF1.2+(4,10). A field type was duplicated. */
OFPERR_OFPBMC_DUP_FIELD,
/* OF1.2+(4,11). Permissions error. */
@@ -333,12 +349,12 @@ enum ofperr {
* specified. */
OFPERR_OFPFMFC_UNSUPPORTED,
/* NX1.0(3,256), NX1.1(5,256). Generic hardware error. */
/* NX1.0-1.1(5,256), NX1.2+(12). Generic hardware error. */
OFPERR_NXFMFC_HARDWARE,
/* NX1.0(3,257), NX1.1(5,257). A nonexistent table ID was specified in the
* "command" field of struct ofp_flow_mod, when the nxt_flow_mod_table_id
* extension is enabled. */
/* NX1.0-1.1(5,257), NX1.2+(13). A nonexistent table ID was specified in
* the "command" field of struct ofp_flow_mod, when the
* nxt_flow_mod_table_id extension is enabled. */
OFPERR_NXFMFC_BAD_TABLE_ID,
/* ## ---------------------- ## */
@@ -465,7 +481,7 @@ enum ofperr {
/* OF1.2+(11,1). Controller role change unsupported. */
OFPERR_OFPRRFC_UNSUP,
/* NX1.0(1,513), NX1.1(1,513), OF1.2+(11,2). Invalid role. */
/* NX1.0-1.1(1,513), OF1.2+(11,2). Invalid role. */
OFPERR_OFPRRFC_BAD_ROLE,
/* ## ---------------------- ## */
@@ -549,6 +565,7 @@ enum ofperr ofperr_decode_msg(const struct ofp_header *,
struct ofpbuf *ofperr_encode_reply(enum ofperr, const struct ofp_header *);
struct ofpbuf *ofperr_encode_hello(enum ofperr, enum ofp_version ofp_version,
const char *);
int ofperr_get_vendor(enum ofperr, enum ofp_version);
int ofperr_get_type(enum ofperr, enum ofp_version);
int ofperr_get_code(enum ofperr, enum ofp_version);