Each client plugin must have a descriptor that provides information to the client plugin API. The descriptor structure begins with a fixed set of members common to all client plugins, followed by any members specific to the plugin type.
            The st_mysql_client_plugin structure in
            the client_plugin.h file defines a
            “generic” descriptor that contains the common
            members:
          
struct st_mysql_client_plugin
{
  int type;
  unsigned int interface_version;
  const char *name;
  const char *author;
  const char *desc;
  unsigned int version[3];
  const char *license;
  void *mysql_api;
  int (*init)(char *, size_t, int, va_list);
  int (*deinit)();
  int (*options)(const char *option, const void *);
};
            The common st_mysql_client_plugin
            descriptor structure members are used as follows.
            char * members should be specified as
            null-terminated strings.
          
- type: The plugin type. This must be one of the plugin-type values from- client_plugin.h, such as- MYSQL_CLIENT_AUTHENTICATION_PLUGIN.
- interface_version: The plugin interface version. For example, this is- MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSIONfor an authentication plugin.
- name: A string that gives the plugin name. This is the name by which you refer to the plugin when you call- mysql_options()with the- MYSQL_DEFAULT_AUTHoption or specify the- --default-authoption to a MySQL client program.
- author: A string naming the plugin author. This can be whatever you like.
- desc: A string that provides a general description of the plugin. This can be whatever you like.
- version: The plugin version as an array of three integers indicating the major, minor, and teeny versions. For example,- {1,2,3}indicates version 1.2.3.
- license: A string that specifies the license type.
- mysql_api: For internal use. Specify it as- NULLin the plugin descriptor.
- 
init: A once-only initialization function, orNULLif there is no such function. The client library executes this function when it loads the plugin. The function returns zero for success and nonzero for failure.The initfunction uses its first two arguments to return an error message if an error occurs. The first argument is a pointer to acharbuffer, and the second argument indicates the buffer length. Any message returned by theinitfunction must be null-terminated, so the maximum message length is the buffer length minus one. The next arguments are passed tomysql_load_plugin(). The first indicates how many more arguments there are (0 if none), followed by any remaining arguments.
- deinit: A once-only deinitialization function, or- NULLif there is no such function. The client library executes this function when it unloads the plugin. The function takes no arguments. It returns zero for success and nonzero for failure.
- options: A function for handling options passed to the plugin, or- NULLif there is no such function. The function takes two arguments representing the option name and a pointer to its value. The function returns zero for success and nonzero for failure.
            For a given client plugin type, the common descriptor
            members may be followed by additional members necessary to
            implement plugins of that type. For example, the
            st_mysql_client_plugin_AUTHENTICATION
            structure for authentication plugins has a function at the
            end that the client library calls to perform authentication.
          
            To declare a plugin, use the
            mysql_declare_client_plugin() and
            mysql_end_client_plugin macros:
          
mysql_declare_client_plugin(plugin_type)
   ... members common to all client plugins ...
   ... type-specific extra members ...
mysql_end_client_plugin;
            Do not specify the type or
            interface_version member explicitly. The
            mysql_declare_client_plugin() macro uses
            the plugin_type argument to
            generate their values automatically. For example, declare an
            authentication client plugin like this:
          
mysql_declare_client_plugin(AUTHENTICATION)
  "my_auth_plugin",
  "Author Name",
  "My Client Authentication Plugin",
  {1,0,0},
  "GPL",
  NULL,
  my_auth_init,
  my_auth_deinit,
  my_auth_options,
  my_auth_main
mysql_end_client_plugin;
            This declaration uses the AUTHENTICATION
            argument to set the type and
            interface_version members to
            MYSQL_CLIENT_AUTHENTICATION_PLUGIN and
            MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION.
          
            Depending on the plugin type, the descriptor may have other
            members following the common members. For example, for an
            authentication plugin, there is a function
            (my_auth_main() in the descriptor just
            shown) that handles communication with the server. See
            Section 4.4.9, “Writing Authentication Plugins”.
          
            Normally, a client program that supports the use of
            authentication plugins causes a plugin to be loaded by
            calling mysql_options() to
            set the MYSQL_DEFAULT_AUTH and
            MYSQL_PLUGIN_DIR options:
          
char *plugin_dir = "path_to_plugin_dir";
char *default_auth = "plugin_name";
/* ... process command-line options ... */
mysql_options(&mysql, MYSQL_PLUGIN_DIR, plugin_dir);
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, default_auth);
            Typically, the program will also accept
            --plugin-dir and
            --default-auth options that enable users to
            override the default values.
          
            Should a client program require lower-level plugin
            management, the client library contains functions that take
            an st_mysql_client_plugin argument. See
            C API Client Plugin Interface.