On Tue, Aug 7, 2018 at 4:20 PM, Ben Pfaff <[email protected]> wrote: > 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 <[email protected]> > > --- > > 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'? >
Because the type (i.e. queried_type) passed is often/usually bogus and therefore enumerating names with this bogus 'type' only serves to generate the appropriate warning logs, yielding a false positive. > > Thanks, > > Ben. > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
