};
struct registered_dpif_class {
- struct dpif_class dpif_class;
+ const struct dpif_class *dpif_class;
int refcount;
};
static struct shash dpif_classes = SHASH_INITIALIZER(&dpif_classes);
struct shash_node *node;
SHASH_FOR_EACH(node, &dpif_classes) {
const struct registered_dpif_class *registered_class = node->data;
- if (registered_class->dpif_class.run) {
- registered_class->dpif_class.run();
+ if (registered_class->dpif_class->run) {
+ registered_class->dpif_class->run();
}
}
}
struct shash_node *node;
SHASH_FOR_EACH(node, &dpif_classes) {
const struct registered_dpif_class *registered_class = node->data;
- if (registered_class->dpif_class.wait) {
- registered_class->dpif_class.wait();
+ if (registered_class->dpif_class->wait) {
+ registered_class->dpif_class->wait();
}
}
}
}
registered_class = xmalloc(sizeof *registered_class);
- memcpy(®istered_class->dpif_class, new_class,
- sizeof registered_class->dpif_class);
+ registered_class->dpif_class = new_class;
registered_class->refcount = 0;
shash_add(&dpif_classes, new_class->type, registered_class);
SHASH_FOR_EACH(node, &dpif_classes) {
const struct registered_dpif_class *registered_class = node->data;
- svec_add(types, registered_class->dpif_class.type);
+ svec_add(types, registered_class->dpif_class->type);
}
}
return EAFNOSUPPORT;
}
- dpif_class = ®istered_class->dpif_class;
+ dpif_class = registered_class->dpif_class;
error = dpif_class->enumerate ? dpif_class->enumerate(names) : 0;
if (error) {
goto exit;
}
- error = registered_class->dpif_class.open(name, type, create, &dpif);
+ error = registered_class->dpif_class->open(name, type, create, &dpif);
if (!error) {
registered_class->refcount++;
}