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)
{
{
if (dp->class == &dpif_netdev_class)
return "tap";
+ if (dp->class == &dpif_planetlab_class)
+ return "tap_pl";
return "dummy";
}
struct dp_netdev *dp = get_dp_netdev(dpif);
int port_no;
- if (dpif->dpif_class != &dpif_netdev_class) {
+ if (dpif->dpif_class != &dpif_netdev_class &&
+ dpif->dpif_class != &dpif_planetlab_class)
+ {
/* If the port name contains a number, try to assign that port number.
* This can make writing unit tests easier because port numbers are
* predictable. */
}
#define DPIF_NETDEV_CLASS_FUNCTIONS \
- NULL, /* enumerate */ \
+ dpif_netdev_enumerate, \
dpif_netdev_open, \
dpif_netdev_close, \
dpif_netdev_destroy, \
DPIF_NETDEV_CLASS_FUNCTIONS
};
+const struct dpif_class dpif_planetlab_class = {
+ "planetlab",
+ DPIF_NETDEV_CLASS_FUNCTIONS
+};
+
static void
dpif_dummy_register__(const char *type)
{