&dpif_linux_class,
#endif
&dpif_netdev_class,
+ &dpif_planetlab_class,
};
struct registered_dpif_class {
static struct sset dpif_blacklist = SSET_INITIALIZER(&dpif_blacklist);
/* Protects 'dpif_classes', including the refcount, and 'dpif_blacklist'. */
-static pthread_mutex_t dpif_mutex = PTHREAD_MUTEX_INITIALIZER;
+static struct ovs_mutex dpif_mutex = OVS_MUTEX_INITIALIZER;
/* Rate limit for individual messages going to or from the datapath, output at
* DBG level. This is very high because, if these are enabled, it is because
{
int error;
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
error = dp_register_provider__(new_class);
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
return error;
}
dp_initialize();
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
error = dp_unregister_provider__(type);
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
return error;
}
void
dp_blacklist_provider(const char *type)
{
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
sset_add(&dpif_blacklist, type);
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
}
/* Clears 'types' and enumerates the types of all currently registered datapath
dp_initialize();
sset_clear(types);
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
SHASH_FOR_EACH(node, &dpif_classes) {
const struct registered_dpif_class *registered_class = node->data;
sset_add(types, registered_class->dpif_class->type);
}
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
}
static void
dp_class_unref(struct registered_dpif_class *rc)
{
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
ovs_assert(rc->refcount);
rc->refcount--;
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
}
static struct registered_dpif_class *
{
struct registered_dpif_class *rc;
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
rc = shash_find_data(&dpif_classes, type);
if (rc) {
rc->refcount++;
}
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
return rc;
}
datapath_type = dpif_normalize_type(datapath_type);
- xpthread_mutex_lock(&dpif_mutex);
+ ovs_mutex_lock(&dpif_mutex);
rc = shash_find_data(&dpif_classes, datapath_type);
if (rc && rc->dpif_class->port_open_type) {
port_type = rc->dpif_class->port_open_type(rc->dpif_class, port_type);
}
- xpthread_mutex_unlock(&dpif_mutex);
+ ovs_mutex_unlock(&dpif_mutex);
return port_type;
}
/* Returns one greater than the maximum port number accepted in flow
* actions. */
-odp_port_t
+uint32_t
dpif_get_max_ports(const struct dpif *dpif)
{
return dpif->dpif_class->get_max_ports(dpif);
if (error) {
ds_put_format(&ds, "(%s) ", ovs_strerror(error));
}
- odp_flow_format(key, key_len, mask, mask_len, &ds);
+ odp_flow_format(key, key_len, mask, mask_len, &ds, true);
if (stats) {
ds_put_cstr(&ds, ", ");
dpif_flow_stats_format(stats, &ds);