diff --git a/src/plugins.h b/src/plugins.h index 3ffc7cf82..b63587870 100644 --- a/src/plugins.h +++ b/src/plugins.h @@ -38,19 +38,22 @@ extern "C" { * Furthermore, there are several internal plugins, implementing built-in data types and selected derived types and YANG * extensions. These internal plugins uses the same API and can be taken as examples for implementing user plugins. Internal * plugins are always loaded with the first created [context](@ref howtoContext) and unloaded with destroying the last one. - * The external plugins are in the same phase loaded from the default directories specified at compile time via cmake - * variables `PLUGINS_DIR` (where the `extensions` and `types` subdirectories are added for each plugin type) or separately - * via `PLUGINS_DIR_EXTENSIONS` and `PLUGINS_DIR_TYPES` for each plugin type. The default directories can be replaced runtime - * using environment variables `LIBYANG_TYPES_PLUGINS_DIR` and `LIBYANG_EXTENSIONS_PLUGINS_DIR`. + * The external plugins are in the same phase loaded as dynamic shared objects (shared libraries) from the default directories + * specified at compile time via cmake variables `PLUGINS_DIR` (where the `extensions` and `types` subdirectories are added + * for each plugin type) or separately via `PLUGINS_DIR_EXTENSIONS` and `PLUGINS_DIR_TYPES` for each plugin type. The default + * directories can be replaced runtime using environment variables `LIBYANG_TYPES_PLUGINS_DIR` and `LIBYANG_EXTENSIONS_PLUGINS_DIR`. + * There is also a separate function ::lyplg_add() to manually add a plugin (dynamic shared object) anytime later. + * Another option to manually add an external plugin is using the ::lyplg_add_extension_plugin() or ::lyplg_add_type_plugin() + * which is useful when loading a dynamic shared object is problematic. These functions allow for setting the necessary callbacks + * for the plugin at runtime. * * Order of the plugins determines their priority. libyang searches for the first match with the extension and type, so the * firstly loaded plugin for the specific item is used. Since the internal plugins are loaded always before the external * plugins, the internal plugins cannot be replaced. * - * There is also a separate function ::lyplg_add() to add a plugin anytime later. Note, that such a plugin is being used - * after it is added with the lowest priority among other already loaded plugins. Also note that since all the plugins are - * unloaded with the destruction of the last context, creating a new context after that starts the standard plugins - * initiation and the manually added plugins are not loaded automatically. + * Note, that manually added plugin via lyplg_add*() function is added with the lowest priority among other already loaded plugins. + * Also note that since all the plugins are unloaded with the destruction of the last context, creating a new context after that + * starts the standard plugins initiation and the manually added plugins are not loaded automatically. * * The following pages contain description of the API for creating user plugins. *