New function ofp_message_type_to_string().
authorBen Pfaff <blp@nicira.com>
Wed, 17 Dec 2008 00:36:25 +0000 (16:36 -0800)
committerBen Pfaff <blp@nicira.com>
Wed, 17 Dec 2008 00:57:44 +0000 (16:57 -0800)
lib/ofp-print.c
lib/ofp-print.h

index 41aed2fd581bf6d343decf8ef124a6bbe8e6e06f..07f5b67c6777f54b37318d26d8c00d035acce435 100644 (file)
@@ -1458,6 +1458,33 @@ ofp_to_string(const void *oh_, size_t len, int verbosity)
     }
     return ds_cstr(&string);
 }
+
+/* Returns the name for the specified OpenFlow message type as a string,
+ * e.g. "OFPT_FEATURES_REPLY".  If no name is known, the string returned is a
+ * hex number, e.g. "0x55".
+ *
+ * The caller must free the returned string when it is no longer needed. */
+char *
+ofp_message_type_to_string(uint8_t type)
+{
+    struct ds s = DS_EMPTY_INITIALIZER;
+    const struct openflow_packet *pkt;
+    for (pkt = packets; ; pkt++) {
+        if (pkt >= &packets[ARRAY_SIZE(packets)]) {
+            ds_put_format(&s, "0x%02"PRIx8, type);
+            break;
+        } else if (type == pkt->type) {
+            const char *p;
+
+            ds_put_cstr(&s, "OFPT_");
+            for (p = pkt->name; *p; p++) {
+                ds_put_char(&s, toupper((unsigned char) *p));
+            }
+            break;
+        }
+    }
+    return ds_cstr(&s);
+}
 \f
 static void
 print_and_free(FILE *stream, char *string) 
index b71212cdbb4d28e6acdaae718165aec673bc518a..0d7e06b652c75a48803083d7d22e409549353c50 100644 (file)
@@ -36,6 +36,7 @@
 #ifndef OFP_PRINT_H
 #define OFP_PRINT_H 1
 
+#include <stdint.h>
 #include <stdio.h>
 
 struct ofp_flow_mod;
@@ -49,6 +50,7 @@ void ofp_print_packet(FILE *stream, const void *data, size_t len, size_t total_l
 
 char *ofp_to_string(const void *, size_t, int verbosity);
 char *ofp_packet_to_string(const void *data, size_t len, size_t total_len);
+char *ofp_message_type_to_string(uint8_t type);
 
 #ifdef  __cplusplus
 }