[ovs-dev] [PATCH 1/2] ofp-util: New function ofputil_port_to_string().
Ben Pfaff
blp at nicira.com
Tue May 21 00:14:44 UTC 2013
This function is more convenient than ofputil_format_port() when a "struct
ds" is not already in use. This commit converts one caller for which this
was already true, and the following commit will add another.
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
lib/ofp-util.c | 32 ++++++++++++++++++++++----------
lib/ofp-util.h | 2 ++
2 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index b4ff09b..e5502e1 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -4135,14 +4135,12 @@ ofputil_port_from_string(const char *s, uint16_t *portp)
*portp = port32;
return true;
} else if (port32 <= OFPP_LAST_RESV) {
- struct ds msg;
+ char name[OFP_MAX_PORT_NAME_LEN];
- ds_init(&msg);
- ofputil_format_port(port32, &msg);
+ ofputil_port_to_string(port32, name, sizeof name);
VLOG_WARN_ONCE("referring to port %s as %u is deprecated for "
"compatibility with future versions of OpenFlow",
- ds_cstr(&msg), port32);
- ds_destroy(&msg);
+ name, port32);
*portp = port32;
return true;
@@ -4183,18 +4181,32 @@ ofputil_port_from_string(const char *s, uint16_t *portp)
void
ofputil_format_port(uint16_t port, struct ds *s)
{
- const char *name;
+ char name[OFP_MAX_PORT_NAME_LEN];
+ ofputil_port_to_string(port, name, sizeof name);
+ ds_put_cstr(s, name);
+}
+
+/* Puts in the 'bufsize' byte in 'buf' a null-terminated string representation
+ * of OpenFlow port number 'port'. Most ports are represented as just the port
+ * number, but special ports, e.g. OFPP_LOCAL, are represented by name,
+ * e.g. "LOCAL". */
+void
+ofputil_port_to_string(uint16_t port,
+ char namebuf[OFP_MAX_PORT_NAME_LEN], size_t bufsize)
+{
switch (port) {
-#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: name = #NAME; break;
+#define OFPUTIL_NAMED_PORT(NAME) \
+ case OFPP_##NAME: \
+ ovs_strlcpy(namebuf, #NAME, bufsize); \
+ break;
OFPUTIL_NAMED_PORTS
#undef OFPUTIL_NAMED_PORT
default:
- ds_put_format(s, "%"PRIu16, port);
- return;
+ snprintf(namebuf, bufsize, "%"PRIu16, port);
+ break;
}
- ds_put_cstr(s, name);
}
/* Given a buffer 'b' that contains an array of OpenFlow ports of type
diff --git a/lib/ofp-util.h b/lib/ofp-util.h
index 4d0d8ad..bf9c315 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -37,6 +37,8 @@ ovs_be32 ofputil_port_to_ofp11(uint16_t ofp10_port);
enum ofperr ofputil_check_output_port(uint16_t ofp_port, int max_ports);
bool ofputil_port_from_string(const char *, uint16_t *portp);
void ofputil_format_port(uint16_t port, struct ds *);
+void ofputil_port_to_string(uint16_t port, char namebuf[OFP_MAX_PORT_NAME_LEN],
+ size_t bufsize);
/* Converting OFPFW10_NW_SRC_MASK and OFPFW10_NW_DST_MASK wildcard bit counts
* to and from IP bitmasks. */
--
1.7.2.5
More information about the dev
mailing list