From 2e1bfcb6315704b804add452ca6d1324dac5b45c Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Wed, 5 Sep 2012 11:50:37 +0900 Subject: [PATCH] ofp-errors: Use OFPERR_OFPBRC_BAD_PORT * In the case of OpenFlow 1.2+ OFPERR_OFPBRC_BAD_PORT is defined in the specification and seems to be the most appropriate error to use when an invalid port is encountered in a Packet Out request. * In the case of OpenFlow 1.0 and 1.1 no appropriate error message seems to exist. Perhaps because an invalid port is not possible? I'm unsure. In any case, make use of a non-standard error code (1,514). This was formerly known as OFPERR_NXBRC_BAD_IN_PORT but has been rolled into OFPERR_NXBRC_BAD_IN_PORT to allow the latter to be used without concern for the prevailing Open Flow version. Signed-off-by: Simon Horman Signed-off-by: Ben Pfaff --- lib/ofp-errors.h | 8 ++++---- lib/ofp-util.c | 7 +------ ofproto/ofproto-provider.h | 2 +- ofproto/ofproto.c | 2 +- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/ofp-errors.h b/lib/ofp-errors.h index e361223b..9a5dbcb0 100644 --- a/lib/ofp-errors.h +++ b/lib/ofp-errors.h @@ -118,7 +118,10 @@ enum ofperr { /* 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. */ @@ -134,9 +137,6 @@ enum ofperr { /* 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, diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 33ff6ea7..1976b943 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -2279,7 +2279,6 @@ ofputil_decode_packet_out(struct ofputil_packet_out *po, const struct ofp_header *oh, struct ofpbuf *ofpacts) { - enum ofperr bad_in_port_err; enum ofpraw raw; struct ofpbuf b; @@ -2301,8 +2300,6 @@ ofputil_decode_packet_out(struct ofputil_packet_out *po, if (error) { return error; } - - bad_in_port_err = OFPERR_OFPBMC_BAD_VALUE; } else if (raw == OFPRAW_OFPT10_PACKET_OUT) { enum ofperr error; const struct ofp_packet_out *opo = ofpbuf_pull(&b, sizeof *opo); @@ -2314,8 +2311,6 @@ ofputil_decode_packet_out(struct ofputil_packet_out *po, if (error) { return error; } - - bad_in_port_err = OFPERR_NXBRC_BAD_IN_PORT; } else { NOT_REACHED(); } @@ -2324,7 +2319,7 @@ ofputil_decode_packet_out(struct ofputil_packet_out *po, && po->in_port != OFPP_NONE && po->in_port != OFPP_CONTROLLER) { VLOG_WARN_RL(&bad_ofmsg_rl, "packet-out has bad input port %#"PRIx16, po->in_port); - return bad_in_port_err; + return OFPERR_OFPBRC_BAD_PORT; } po->ofpacts = ofpacts->data; diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index f6cb3573..fb7db230 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -948,7 +948,7 @@ struct ofproto_class { * * flow->in_port comes from the OpenFlow OFPT_PACKET_OUT message. The * implementation should reject invalid flow->in_port values by returning - * OFPERR_NXBRC_BAD_IN_PORT. (If the implementation called + * OFPERR_OFPBRC_BAD_PORT. (If the implementation called * ofproto_init_max_ports(), then the client will reject these ports * itself.) For consistency, the implementation should consider valid for * flow->in_port any value that could possibly be seen in a packet that it diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 5cf1a6a2..3c4184f3 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -2130,7 +2130,7 @@ handle_packet_out(struct ofconn *ofconn, const struct ofp_header *oh) goto exit_free_ofpacts; } if (po.in_port >= p->max_ports && po.in_port < OFPP_MAX) { - error = OFPERR_NXBRC_BAD_IN_PORT; + error = OFPERR_OFPBRC_BAD_PORT; goto exit_free_ofpacts; } -- 2.30.2