[ovs-dev] [PATCH] ofp-flow: Fix return value for ofputil_decode_flow_stats_reply().
Ben Pfaff
blp at ovn.org
Tue Feb 13 18:49:00 UTC 2018
This function returned errno values for some errors and OFPERR_* values
for others. The callers all expected OFPERR_* values. This fixes the
problem.
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
lib/ofp-flow.c | 36 ++++++++++++++++++++----------------
1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/lib/ofp-flow.c b/lib/ofp-flow.c
index 8876b7be5eb1..c29f5b7cb05f 100644
--- a/lib/ofp-flow.c
+++ b/lib/ofp-flow.c
@@ -752,7 +752,7 @@ parse_ofp_flow_stats_request_str(struct ofputil_flow_stats_request *fsr,
* of it. 'fs->ofpacts' will point into the 'ofpacts' buffer.
*
* Returns 0 if successful, EOF if no replies were left in this 'msg',
- * otherwise a positive errno value. */
+ * otherwise an OFPERR_* value. */
int
ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *fs,
struct ofpbuf *msg,
@@ -783,20 +783,21 @@ ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *fs,
if (!ofs) {
VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
"bytes at end", msg->size);
- return EINVAL;
+ return OFPERR_OFPBRC_BAD_LEN;
}
length = ntohs(ofs->length);
if (length < sizeof *ofs) {
VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
"length %"PRIuSIZE, length);
- return EINVAL;
+ return OFPERR_OFPBRC_BAD_LEN;
}
- if (ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
- &padded_match_len)) {
+ error = ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
+ &padded_match_len);
+ if (error) {
VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
- return EINVAL;
+ return error;
}
instructions_len = length - sizeof *ofs - padded_match_len;
@@ -833,14 +834,14 @@ ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *fs,
if (!ofs) {
VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
"bytes at end", msg->size);
- return EINVAL;
+ return OFPERR_OFPBRC_BAD_LEN;
}
length = ntohs(ofs->length);
if (length < sizeof *ofs) {
VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
"length %"PRIuSIZE, length);
- return EINVAL;
+ return OFPERR_OFPBRC_BAD_LEN;
}
instructions_len = length - sizeof *ofs;
@@ -866,7 +867,7 @@ ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *fs,
if (!nfs) {
VLOG_WARN_RL(&rl, "NXST_FLOW reply has %"PRIu32" leftover "
"bytes at end", msg->size);
- return EINVAL;
+ return OFPERR_OFPBRC_BAD_LEN;
}
length = ntohs(nfs->length);
@@ -874,11 +875,12 @@ ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *fs,
if (length < sizeof *nfs + ROUND_UP(match_len, 8)) {
VLOG_WARN_RL(&rl, "NXST_FLOW reply with match_len=%"PRIuSIZE" "
"claims invalid length %"PRIuSIZE, match_len, length);
- return EINVAL;
+ return OFPERR_OFPBRC_BAD_LEN;
}
- if (nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false, NULL,
- NULL)) {
- return EINVAL;
+ error = nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false,
+ NULL, NULL);
+ if (error) {
+ return error;
}
instructions_len = length - sizeof *nfs - ROUND_UP(match_len, 8);
@@ -907,10 +909,12 @@ ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *fs,
OVS_NOT_REACHED();
}
- if (ofpacts_pull_openflow_instructions(msg, instructions_len, oh->version,
- NULL, NULL, ofpacts)) {
+ error = ofpacts_pull_openflow_instructions(msg, instructions_len,
+ oh->version, NULL, NULL,
+ ofpacts);
+ if (error) {
VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad instructions");
- return EINVAL;
+ return error;
}
fs->ofpacts = ofpacts->data;
fs->ofpacts_len = ofpacts->size;
--
2.16.1
More information about the dev
mailing list