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 <b...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev