[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