dpctl uses a user or database defined type when calling netdev_open. Instead, it should use the type from dpif_port_open_type. Otherwise, when using the internal type, it could open it with that type instead of the correct one, which would be tap or dummy. --- lib/dpctl.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/lib/dpctl.c b/lib/dpctl.c index 003602a..f896161 100644 --- a/lib/dpctl.c +++ b/lib/dpctl.c @@ -274,7 +274,8 @@ dpctl_add_if(int argc OVS_UNUSED, const char *argv[], } } - error = netdev_open(name, type, &netdev); + error = netdev_open(name, dpif_port_open_type(dpif_type(dpif), type), + &netdev); if (error) { dpctl_error(dpctl_p, error, "%s: failed to open network device", name); @@ -356,7 +357,8 @@ dpctl_set_if(int argc, const char *argv[], struct dpctl_params *dpctl_p) dpif_port_destroy(&dpif_port); /* Retrieve its existing configuration. */ - error = netdev_open(name, type, &netdev); + error = netdev_open(name, dpif_port_open_type(dpif_type(dpif), type), + &netdev); if (error) { dpctl_error(dpctl_p, error, "%s: failed to open network device", name); @@ -558,10 +560,13 @@ show_dpif(struct dpif *dpif, struct dpctl_params *dpctl_p) qsort(port_nos, n_port_nos, sizeof *port_nos, compare_port_nos); for (int i = 0; i < n_port_nos; i++) { + const char *type; if (dpif_port_query_by_number(dpif, port_nos[i], &dpif_port)) { continue; } + type = dpif_port_open_type(dpif_type(dpif), dpif_port.type); + dpctl_print(dpctl_p, "\tport %u: %s", dpif_port.port_no, dpif_port.name); @@ -570,7 +575,7 @@ show_dpif(struct dpif *dpif, struct dpctl_params *dpctl_p) dpctl_print(dpctl_p, " (%s", dpif_port.type); - error = netdev_open(dpif_port.name, dpif_port.type, &netdev); + error = netdev_open(dpif_port.name, type, &netdev); if (!error) { struct smap config; @@ -603,7 +608,7 @@ show_dpif(struct dpif *dpif, struct dpctl_params *dpctl_p) struct netdev_stats s; int error; - error = netdev_open(dpif_port.name, dpif_port.type, &netdev); + error = netdev_open(dpif_port.name, type, &netdev); if (error) { dpctl_print(dpctl_p, ", open failed (%s)", ovs_strerror(error)); @@ -891,6 +896,7 @@ get_in_port_netdev_from_key(struct dpif *dpif, const struct ofpbuf *key) struct dpif_port dpif_port; odp_port_t port_no; int error; + const char *type; port_no = ODP_PORT_C(nl_attr_get_u32(in_port_nla)); error = dpif_port_query_by_number(dpif, port_no, &dpif_port); @@ -898,7 +904,8 @@ get_in_port_netdev_from_key(struct dpif *dpif, const struct ofpbuf *key) goto out; } - netdev_open(dpif_port.name, dpif_port.type, &dev); + type = dpif_port_open_type(dpif_type(dpif), dpif_port.type); + netdev_open(dpif_port.name, type, &dev); dpif_port_destroy(&dpif_port); } -- 2.7.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev