[ovs-dev] [patch v5] dpctl: Make opt_dpif_open() more general.

Ben Pfaff blp at ovn.org
Tue Aug 7 23:20:41 UTC 2018


On Mon, Aug 06, 2018 at 07:24:39PM -0700, Darrell Ball wrote:
> By making opt_dpif_open() more general, it can be used effectively
> by all potential callers and avoids trying to open potentially bogus
> datapaths provided by the user. Also, the error handling is improved by
> having more specific errors.
> 
> Signed-off-by: Darrell Ball <dlu998 at gmail.com>
> ---
>  lib/dpctl.c             | 61 +++++++++++++++++++++++++++++++++++++++++++++----
>  tests/system-traffic.at |  8 +++----
>  2 files changed, 60 insertions(+), 9 deletions(-)
> 
> diff --git a/lib/dpctl.c b/lib/dpctl.c
> index c600eeb..b8a8dbf 100644
> --- a/lib/dpctl.c
> +++ b/lib/dpctl.c
> @@ -187,18 +187,69 @@ parsed_dpif_open(const char *arg_, bool create, struct dpif **dpifp)
>      return result;
>  }
>  
> +static bool
> +dp_exists(const char *queried_dp)
> +{
> +    struct sset dpif_names = SSET_INITIALIZER(&dpif_names),
> +                dpif_types = SSET_INITIALIZER(&dpif_types);
> +    bool found = false;
> +    char *queried_name, *queried_type;
> +
> +    dp_parse_name(queried_dp, &queried_name, &queried_type);
> +    dp_enumerate_types(&dpif_types);
> +
> +    const char *type;
> +    SSET_FOR_EACH (type, &dpif_types) {
> +        int error = dp_enumerate_names(type, &dpif_names);
> +        if (!error) {
> +            const char *name;
> +            SSET_FOR_EACH (name, &dpif_names) {
> +                if (!strcmp(type, queried_type) &&
> +                    !strcmp(name, queried_name)) {
> +                    found = true;
> +                    goto out;
> +                }
> +            }
> +        }
> +    }
> +
> +out:
> +    sset_destroy(&dpif_names);
> +    sset_destroy(&dpif_types);
> +    return found;
> +}

Thanks for working to make ovs-dpctl error messages better!

I don't see why one would bother to enumerate the types here.  There is
only one type that could be of interest.  I think you said that you
don't want to just try to blindly open (type,name), but even if so, why
not just try to enumerate the names within 'type'?

Thanks,

Ben.


More information about the dev mailing list