2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

dpif-netdev: allow for proper destruction of netdev datapaths

Until now, bridges with datapath_type=netdev did not destroy the datapath
when deleted. In particular, the tap device implementing the internal
interface was not close()d, and therefore the tap persists until
ovs-vswitchd exit()s.

This behaviour was caused by the missing callback for 'enumerate' in the
dpif-netdev class. Without this callback 'bridge_reconfigure' failed to
realize that there are datapaths with no bridge, and thus cannot destroy
them. Providing an 'enumerate' callback fixes this.

Signed-off-by: Giuseppe Lettieri <g.lettieri@iet.unipi.it>
Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Giuseppe Lettieri
2012-05-09 12:17:15 +02:00
committed by Ben Pfaff
parent e6c5e53903
commit 2197d7abab
2 changed files with 13 additions and 1 deletions

View File

@@ -165,6 +165,17 @@ get_dp_netdev(const struct dpif *dpif)
return dpif_netdev_cast(dpif)->dp;
}
static int
dpif_netdev_enumerate(struct sset *all_dps)
{
struct shash_node *node;
SHASH_FOR_EACH(node, &dp_netdevs) {
sset_add(all_dps, node->name);
}
return 0;
}
static struct dpif *
create_dpif_netdev(struct dp_netdev *dp)
{
@@ -1241,7 +1252,7 @@ dp_netdev_execute_actions(struct dp_netdev *dp,
const struct dpif_class dpif_netdev_class = {
"netdev",
NULL, /* enumerate */
dpif_netdev_enumerate,
dpif_netdev_open,
dpif_netdev_close,
dpif_netdev_destroy,