Skip to content

Commit

Permalink
dpctl: Ignore enumeration errors if there is at least one datapath.
Browse files Browse the repository at this point in the history
When dpctl commands are used to inspect a userspace datapath, but OVS
has also built-in support for the kernel datapath, an error message is
reported if the kernel module is not loaded.  This commit suppresses the
message.

Suggested-by: Ethan Jackson <[email protected]>
Signed-off-by: Daniele Di Proietto <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
ddiproietto authored and blp committed May 7, 2015
1 parent 1f70f3f commit 88c98bf
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions lib/dpctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -621,26 +621,28 @@ dps_for_each(struct dpctl_params *dpctl_p, dps_for_each_cb cb)
{
struct sset dpif_names = SSET_INITIALIZER(&dpif_names),
dpif_types = SSET_INITIALIZER(&dpif_types);
int error, lasterror = 0;
int error, openerror = 0, enumerror = 0;
const char *type, *name;
bool at_least_one = false;

dp_enumerate_types(&dpif_types);

SSET_FOR_EACH (type, &dpif_types) {
error = dp_enumerate_names(type, &dpif_names);
if (error) {
lasterror = error;
enumerror = error;
}

SSET_FOR_EACH (name, &dpif_names) {
struct dpif *dpif;

at_least_one = true;
error = dpif_open(name, type, &dpif);
if (!error) {
cb(dpif, dpctl_p);
dpif_close(dpif);
} else {
lasterror = error;
openerror = error;
dpctl_error(dpctl_p, error, "opening datapath %s failed",
name);
}
Expand All @@ -650,7 +652,17 @@ dps_for_each(struct dpctl_params *dpctl_p, dps_for_each_cb cb)
sset_destroy(&dpif_names);
sset_destroy(&dpif_types);

return lasterror;
/* If there has been an error while opening a datapath it should be
* reported. Otherwise, we want to ignore the errors generated by
* dp_enumerate_names() if at least one datapath has been discovered,
* because they're not interesting for the user. This happens, for
* example, if OVS is using a userspace datapath and the kernel module
* is not loaded. */
if (openerror) {
return openerror;
} else {
return at_least_one ? 0 : enumerror;
}
}

static int
Expand Down

0 comments on commit 88c98bf

Please sign in to comment.