lib/classifier: Simpilify array ordering.
[cascardo/ovs.git] / lib / ofp-errors.c
index d1e4dbf..c803494 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013 Nicira, Inc.
+ * Copyright (c) 2012, 2013, 2014 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -52,6 +52,8 @@ ofperr_domain_from_version(enum ofp_version version)
         return &ofperr_of13;
     case OFP14_VERSION:
         return &ofperr_of14;
+    case OFP15_VERSION:
+        return &ofperr_of15;
     default:
         return NULL;
     }
@@ -272,8 +274,10 @@ ofperr_get_code(enum ofperr error, enum ofp_version version)
 /* Tries to decode 'oh', which should be an OpenFlow OFPT_ERROR message.
  * Returns an OFPERR_* constant on success, 0 on failure.
  *
- * If 'payload' is nonnull, on success '*payload' is initialized to the
- * error's payload, and on failure it is cleared. */
+ * If 'payload' is nonnull, on success '*payload' is initialized with a copy of
+ * the error's payload (copying is required because the payload is not properly
+ * aligned).  The caller must free the payload (with ofpbuf_uninit()) when it
+ * is no longer needed.  On failure, '*payload' is cleared. */
 enum ofperr
 ofperr_decode_msg(const struct ofp_header *oh, struct ofpbuf *payload)
 {
@@ -323,7 +327,8 @@ ofperr_decode_msg(const struct ofp_header *oh, struct ofpbuf *payload)
     /* Translate the error type and code into an ofperr. */
     error = ofperr_decode(oh->version, vendor, type, code);
     if (error && payload) {
-        ofpbuf_use_const(payload, ofpbuf_data(&b), ofpbuf_size(&b));
+        ofpbuf_init(payload, ofpbuf_size(&b));
+        ofpbuf_push(payload, ofpbuf_data(&b), ofpbuf_size(&b));
     }
     return error;
 }