diff options
-rw-r--r-- | lib/dpif-netdev.c | 7 | ||||
-rw-r--r-- | lib/dpif-provider.h | 4 | ||||
-rw-r--r-- | lib/dpif.c | 11 |
3 files changed, 16 insertions, 6 deletions
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 0b73056a8..1953bb37c 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -1435,7 +1435,7 @@ get_port_by_number(struct dp_netdev *dp, return EINVAL; } else { *portp = dp_netdev_lookup_port(dp, port_no); - return *portp ? 0 : ENOENT; + return *portp ? 0 : ENODEV; } } @@ -1473,7 +1473,10 @@ get_port_by_name(struct dp_netdev *dp, return 0; } } - return ENOENT; + + /* Callers of dpif_netdev_port_query_by_name() expect ENODEV for a non + * existing port. */ + return ENODEV; } static int diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h index 56b88f93d..d3b2bb91d 100644 --- a/lib/dpif-provider.h +++ b/lib/dpif-provider.h @@ -176,6 +176,10 @@ struct dpif_class { * If 'port' is not null, stores information about the port into * '*port' if successful. * + * If the port doesn't exist, the provider must return ENODEV. Other + * error numbers means that something wrong happened and will be + * treated differently by upper layers. + * * If 'port' is not null, the caller takes ownership of data in * 'port' and must free it with dpif_port_destroy() when it is no * longer needed. */ diff --git a/lib/dpif.c b/lib/dpif.c index 53958c559..cc4936c70 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -602,7 +602,7 @@ bool dpif_port_exists(const struct dpif *dpif, const char *devname) { int error = dpif->dpif_class->port_query_by_name(dpif, devname, NULL); - if (error != 0 && error != ENOENT && error != ENODEV) { + if (error != 0 && error != ENODEV) { VLOG_WARN_RL(&error_rl, "%s: failed to query port %s: %s", dpif_name(dpif), devname, ovs_strerror(error)); } @@ -631,6 +631,8 @@ dpif_port_set_config(struct dpif *dpif, odp_port_t port_no, * initializes '*port' appropriately; on failure, returns a positive errno * value. * + * Retuns ENODEV if the port doesn't exist. + * * The caller owns the data in 'port' and must free it with * dpif_port_destroy() when it is no longer needed. */ int @@ -653,6 +655,8 @@ dpif_port_query_by_number(const struct dpif *dpif, odp_port_t port_no, * initializes '*port' appropriately; on failure, returns a positive errno * value. * + * Retuns ENODEV if the port doesn't exist. + * * The caller owns the data in 'port' and must free it with * dpif_port_destroy() when it is no longer needed. */ int @@ -666,12 +670,11 @@ dpif_port_query_by_name(const struct dpif *dpif, const char *devname, } else { memset(port, 0, sizeof *port); - /* For ENOENT or ENODEV we use DBG level because the caller is probably + /* For ENODEV we use DBG level because the caller is probably * interested in whether 'dpif' actually has a port 'devname', so that * it's not an issue worth logging if it doesn't. Other errors are * uncommon and more likely to indicate a real problem. */ - VLOG_RL(&error_rl, - error == ENOENT || error == ENODEV ? VLL_DBG : VLL_WARN, + VLOG_RL(&error_rl, error == ENODEV ? VLL_DBG : VLL_WARN, "%s: failed to query port %s: %s", dpif_name(dpif), devname, ovs_strerror(error)); } |