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

Reply via email to