/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
*/
#include "ses_impl.h"
/*ARGSUSED*/
void *
{
return (NULL);
return (NULL);
} else {
}
}
int
{
continue;
return (-1);
}
return (0);
}
int
{
int ret;
return (ses_set_errno(ESES_NOMEM));
/*
* Technically we could get away with a per-snapshot lock while we fill
* the control page contents, but this doesn't take much time and we
* want actual control operations to be protected per-target, so we just
* take the target lock.
*/
/*
* We walk the list of plugins backwards, so that a product-specific
* plugin can rewrite the nvlist to control operations in terms of the
* standard mechanisms, if desired.
*/
continue;
return (-1);
}
}
return (-1);
}
return (ret);
}
/*ARGSUSED*/
void *
{
return (NULL);
return (NULL);
lenp));
} else {
}
}
ses_node_t *np)
{
continue;
dp++) {
continue;
/*
* A product-specific plugin can take an
* advantage of the standard page to carry
* the control operations on a vendor specific
* element as SUN plugin defines SUNW specefic
* elements like SUNW,FANMODULE and plugin page
* SES2_DIAGPAGE_ENCLOSURE_CTL_STATUS which
* is also defined in ses2. Checking
* if the node type is known to the
* plugin that is being probed allows to return
* the proper page.
* The caller should pass np if node type
* checking needs to be done.
*/
/*
* if the type is not known to
* the plugin continue to next plugin.
*/
== 0) {
return (dp);
} else {
/* move to next plugin. */
break;
}
} else {
return (dp);
}
}
}
}
return (NULL);
}
int
{
if (version != LIBSES_PLUGIN_VERSION)
return (ses_set_errno(ESES_VERSION));
}
return (0);
}
void
{
}
void *
{
}
static void
ses_plugin_cleanstr(char *s)
{
while (*s != '\0') {
if (*s == ' ' || *s == '/')
*s = '-';
s++;
}
}
static void
{
if (ses_plugin_dlclose)
}
static int
{
void *obj;
int (*ses_priority)(void);
return (0);
return (-1);
}
return (0);
}
/*
* Framework modules can establish an explicit prioritying by declaring
* the '_ses_priority' symbol, which returns an integer used to create
* an explicit ordering between plugins.
*/
break;
}
else
return (-1);
return (0);
}
static int
{
#if defined(_LP64)
isa[0] = '\0';
#else
isa[0] = '\0';
#endif
continue;
return (-1);
}
}
}
/*
* questionable characters, and then attempt to load each plugin.
*/
return (-1);
return (-1);
return (-1);
return (0);
}
int
{
const char *pluginpath, *p, *q;
for (p = pluginpath; p != NULL; p = q) {
while (*q == ':')
++q;
if (*q == '\0')
q = NULL;
if (len == 0)
continue;
} else {
(void) strcpy(pluginroot, p);
}
if (pluginroot[0] != '/')
continue;
return (-1);
}
return (0);
}
void
{
}
}