mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
dpif-provider: Add class init function.
This init function is called when the dpif class is registered. It will be used by following commits Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
committed by
Ethan Jackson
parent
55e3ca97d1
commit
c8973eb634
@@ -3353,6 +3353,7 @@ dp_netdev_execute_actions(struct dp_netdev_pmd_thread *pmd,
|
||||
|
||||
const struct dpif_class dpif_netdev_class = {
|
||||
"netdev",
|
||||
NULL, /* init */
|
||||
dpif_netdev_enumerate,
|
||||
dpif_netdev_port_open_type,
|
||||
dpif_netdev_open,
|
||||
|
@@ -2274,6 +2274,7 @@ dpif_netlink_get_datapath_version(void)
|
||||
|
||||
const struct dpif_class dpif_netlink_class = {
|
||||
"system",
|
||||
NULL, /* init */
|
||||
dpif_netlink_enumerate,
|
||||
NULL,
|
||||
dpif_netlink_open,
|
||||
|
@@ -90,6 +90,14 @@ struct dpif_class {
|
||||
* the type assumed if no type is specified when opening a dpif. */
|
||||
const char *type;
|
||||
|
||||
/* Called when the dpif provider is registered, typically at program
|
||||
* startup. Returning an error from this function will prevent any
|
||||
* datapath with this class from being created.
|
||||
*
|
||||
* This function may be set to null if a datapath class needs no
|
||||
* initialization at registration time. */
|
||||
int (*init)(void);
|
||||
|
||||
/* Enumerates the names of all known created datapaths (of class
|
||||
* 'dpif_class'), if possible, into 'all_dps'. The caller has already
|
||||
* initialized 'all_dps' and other dpif classes might already have added
|
||||
|
@@ -135,6 +135,7 @@ static int
|
||||
dp_register_provider__(const struct dpif_class *new_class)
|
||||
{
|
||||
struct registered_dpif_class *registered_class;
|
||||
int error;
|
||||
|
||||
if (sset_contains(&dpif_blacklist, new_class->type)) {
|
||||
VLOG_DBG("attempted to register blacklisted provider: %s",
|
||||
@@ -148,6 +149,13 @@ dp_register_provider__(const struct dpif_class *new_class)
|
||||
return EEXIST;
|
||||
}
|
||||
|
||||
error = new_class->init ? new_class->init() : 0;
|
||||
if (error) {
|
||||
VLOG_WARN("failed to initialize %s datapath class: %s",
|
||||
new_class->type, ovs_strerror(error));
|
||||
return error;
|
||||
}
|
||||
|
||||
registered_class = xmalloc(sizeof *registered_class);
|
||||
registered_class->dpif_class = new_class;
|
||||
registered_class->refcount = 0;
|
||||
|
Reference in New Issue
Block a user