Acked-by: Ethan Jackson <et...@nicira.com>
On Wed, Apr 1, 2015 at 9:21 AM, Daniele Di Proietto <diproiet...@vmware.com> wrote: > This init function is called when the dpif class is registered. It will > be used by following commits > > Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com> > --- > lib/dpif-netdev.c | 1 + > lib/dpif-netlink.c | 1 + > lib/dpif-provider.h | 8 ++++++++ > lib/dpif.c | 8 ++++++++ > 4 files changed, 18 insertions(+) > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > index c093d10..e5806f7 100644 > --- a/lib/dpif-netdev.c > +++ b/lib/dpif-netdev.c > @@ -3363,6 +3363,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, > diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c > index 93fd8a4..ef9d318 100644 > --- a/lib/dpif-netlink.c > +++ b/lib/dpif-netlink.c > @@ -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, > diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h > index 7b4878eb..28ea86f 100644 > --- a/lib/dpif-provider.h > +++ b/lib/dpif-provider.h > @@ -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 > diff --git a/lib/dpif.c b/lib/dpif.c > index ee71774..b8f30a5 100644 > --- a/lib/dpif.c > +++ b/lib/dpif.c > @@ -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; > -- > 2.1.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev