[ovs-dev] [nxast_controller 1/2] ofp-util: New functions for string versions of ofp_packet_in_reason.

Ben Pfaff blp at nicira.com
Tue Feb 7 23:06:43 UTC 2012


Upcoming commits add a user for ofputil_packet_in_reason_from_string()
and more users for ofputil_packet_in_reason_to_string().

Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 lib/ofp-print.c |   22 ++--------------------
 lib/ofp-util.c  |   35 +++++++++++++++++++++++++++++++++++
 lib/ofp-util.h  |    4 ++++
 3 files changed, 41 insertions(+), 20 deletions(-)

diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 1e36662..ae7ed08 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
@@ -80,24 +80,6 @@ ofp_packet_to_string(const void *data, size_t len)
     return ds_cstr(&ds);
 }
 
-static const char *
-ofp_packet_in_reason_to_string(enum ofp_packet_in_reason reason)
-{
-    static char s[32];
-
-    switch (reason) {
-    case OFPR_NO_MATCH:
-        return "no_match";
-    case OFPR_ACTION:
-        return "action";
-    case OFPR_INVALID_TTL:
-        return "invalid_ttl";
-    default:
-        sprintf(s, "%d", (int) reason);
-        return s;
-    }
-}
-
 static void
 ofp_print_packet_in(struct ds *string, const struct ofp_header *oh,
                     int verbosity)
@@ -140,7 +122,7 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh,
     }
 
     ds_put_format(string, " (via %s)",
-                  ofp_packet_in_reason_to_string(pin.reason));
+                  ofputil_packet_in_reason_to_string(pin.reason));
 
     ds_put_format(string, " data_len=%zu", pin.packet_len);
     if (pin.buffer_id == UINT32_MAX) {
@@ -1354,7 +1336,7 @@ ofp_print_nxt_set_async_config(struct ds *string,
         for (j = 0; j < 32; j++) {
             if (nac->packet_in_mask[i] & htonl(1u << j)) {
                 ds_put_format(string, " %s",
-                              ofp_packet_in_reason_to_string(j));
+                              ofputil_packet_in_reason_to_string(j));
             }
         }
         if (!nac->packet_in_mask[i]) {
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 53b5af1..704823a 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -1756,6 +1756,41 @@ ofputil_encode_packet_in(const struct ofputil_packet_in *pin,
     return packet;
 }
 
+const char *
+ofputil_packet_in_reason_to_string(enum ofp_packet_in_reason reason)
+{
+    static char s[INT_STRLEN(int) + 1];
+
+    switch (reason) {
+    case OFPR_NO_MATCH:
+        return "no_match";
+    case OFPR_ACTION:
+        return "action";
+    case OFPR_INVALID_TTL:
+        return "invalid_ttl";
+
+    case OFPR_N_REASONS:
+    default:
+        sprintf(s, "%d", (int) reason);
+        return s;
+    }
+}
+
+bool
+ofputil_packet_in_reason_from_string(const char *s,
+                                     enum ofp_packet_in_reason *reason)
+{
+    int i;
+
+    for (i = 0; i < OFPR_N_REASONS; i++) {
+        if (!strcasecmp(s, ofputil_packet_in_reason_to_string(i))) {
+            *reason = i;
+            return true;
+        }
+    }
+    return false;
+}
+
 enum ofperr
 ofputil_decode_packet_out(struct ofputil_packet_out *po,
                           const struct ofp_packet_out *opo)
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index 72abd0b..0ca1d99 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -246,6 +246,10 @@ struct ofpbuf *ofputil_encode_packet_in(const struct ofputil_packet_in *,
 int ofputil_decode_packet_in(struct ofputil_packet_in *pi,
                              const struct ofp_header *oh);
 
+const char *ofputil_packet_in_reason_to_string(enum ofp_packet_in_reason);
+bool ofputil_packet_in_reason_from_string(const char *,
+                                          enum ofp_packet_in_reason *);
+
 /* Abstract packet-out message. */
 struct ofputil_packet_out {
     const void *packet;         /* Packet data, if buffer_id == UINT32_MAX. */
-- 
1.7.2.5




More information about the dev mailing list