[ovs-dev] [PATCH v2 1/2] ofp-util: New function ofputil_port_to_string().

Ben Pfaff blp at nicira.com
Wed Jun 12 18:38:30 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 26da477..3cc4026 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -4144,14 +4144,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;
@@ -4192,18 +4190,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 1c8d6cd..424bb73 100644
--- a/lib/ofp-util.h
+++ b/lib/ofp-util.h
@@ -38,6 +38,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