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

Ansis Atteka aatteka at nicira.com
Mon Jun 24 19:48:25 UTC 2013


On Wed, Jun 12, 2013 at 11:38 AM, Ben Pfaff <blp at nicira.com> wrote:

> 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
>
Did you mean something like this instead:

Puts in the 'namebuf' buffer that is of size 'bufsize' 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);
>

Also, It seems that now there is trivial conflict where uint16_t has
changed to ofp_port_t.

Otherwise looks good to me.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20130624/5476e62a/attachment-0003.html>


More information about the dev mailing list