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:
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user