1aff4bce5Syi zhang - Sun Microsystems - Beijing China /*
2aff4bce5Syi zhang - Sun Microsystems - Beijing China * CDDL HEADER START
3aff4bce5Syi zhang - Sun Microsystems - Beijing China *
4aff4bce5Syi zhang - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the
5aff4bce5Syi zhang - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License").
6aff4bce5Syi zhang - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License.
7aff4bce5Syi zhang - Sun Microsystems - Beijing China *
8aff4bce5Syi zhang - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9aff4bce5Syi zhang - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
10aff4bce5Syi zhang - Sun Microsystems - Beijing China * See the License for the specific language governing permissions
11aff4bce5Syi zhang - Sun Microsystems - Beijing China * and limitations under the License.
12aff4bce5Syi zhang - Sun Microsystems - Beijing China *
13aff4bce5Syi zhang - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each
14aff4bce5Syi zhang - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15aff4bce5Syi zhang - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the
16aff4bce5Syi zhang - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying
17aff4bce5Syi zhang - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner]
18aff4bce5Syi zhang - Sun Microsystems - Beijing China *
19aff4bce5Syi zhang - Sun Microsystems - Beijing China * CDDL HEADER END
20aff4bce5Syi zhang - Sun Microsystems - Beijing China */
21aff4bce5Syi zhang - Sun Microsystems - Beijing China /*
22aff4bce5Syi zhang - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23aff4bce5Syi zhang - Sun Microsystems - Beijing China * Use is subject to license terms.
24aff4bce5Syi zhang - Sun Microsystems - Beijing China */
25aff4bce5Syi zhang - Sun Microsystems - Beijing China
26aff4bce5Syi zhang - Sun Microsystems - Beijing China #include <dlfcn.h>
27aff4bce5Syi zhang - Sun Microsystems - Beijing China #include <pthread.h>
28aff4bce5Syi zhang - Sun Microsystems - Beijing China #include <string.h>
29aff4bce5Syi zhang - Sun Microsystems - Beijing China #include <sys/sem.h>
30aff4bce5Syi zhang - Sun Microsystems - Beijing China
31aff4bce5Syi zhang - Sun Microsystems - Beijing China #include "libsun_ima.h"
32aff4bce5Syi zhang - Sun Microsystems - Beijing China #include "ima.h"
33aff4bce5Syi zhang - Sun Microsystems - Beijing China #include "ima-plugin.h"
34aff4bce5Syi zhang - Sun Microsystems - Beijing China
35aff4bce5Syi zhang - Sun Microsystems - Beijing China extern int number_of_plugins;
36aff4bce5Syi zhang - Sun Microsystems - Beijing China extern int libMutex;
37aff4bce5Syi zhang - Sun Microsystems - Beijing China extern IMA_PLUGIN_INFO plugintable[IMA_MAX_NUM_PLUGINS];
38aff4bce5Syi zhang - Sun Microsystems - Beijing China extern void InitLibrary();
39aff4bce5Syi zhang - Sun Microsystems - Beijing China
40aff4bce5Syi zhang - Sun Microsystems - Beijing China static void os_obtainmutex(int semid);
41aff4bce5Syi zhang - Sun Microsystems - Beijing China static void os_releasemutex(int semid);
42aff4bce5Syi zhang - Sun Microsystems - Beijing China
SUN_IMA_SetTunableProperties(IMA_OID oid,ISCSI_TUNABLE_PARAM * param)43aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_API IMA_STATUS SUN_IMA_SetTunableProperties(
44aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_OID oid,
45aff4bce5Syi zhang - Sun Microsystems - Beijing China ISCSI_TUNABLE_PARAM *param) {
46aff4bce5Syi zhang - Sun Microsystems - Beijing China SUN_IMA_SetTunablePropertiesFn PassFunc;
47aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_UINT i;
48aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_STATUS status;
49aff4bce5Syi zhang - Sun Microsystems - Beijing China
50aff4bce5Syi zhang - Sun Microsystems - Beijing China if (number_of_plugins == -1) {
51aff4bce5Syi zhang - Sun Microsystems - Beijing China InitLibrary();
52aff4bce5Syi zhang - Sun Microsystems - Beijing China }
53aff4bce5Syi zhang - Sun Microsystems - Beijing China
54aff4bce5Syi zhang - Sun Microsystems - Beijing China if (param == NULL) {
55aff4bce5Syi zhang - Sun Microsystems - Beijing China return (IMA_ERROR_INVALID_PARAMETER);
56aff4bce5Syi zhang - Sun Microsystems - Beijing China }
57aff4bce5Syi zhang - Sun Microsystems - Beijing China
58aff4bce5Syi zhang - Sun Microsystems - Beijing China if ((oid.objectType != IMA_OBJECT_TYPE_LHBA) &&
59aff4bce5Syi zhang - Sun Microsystems - Beijing China (oid.objectType != IMA_OBJECT_TYPE_TARGET)) {
60aff4bce5Syi zhang - Sun Microsystems - Beijing China return (IMA_ERROR_INCORRECT_OBJECT_TYPE);
61aff4bce5Syi zhang - Sun Microsystems - Beijing China }
62aff4bce5Syi zhang - Sun Microsystems - Beijing China
63aff4bce5Syi zhang - Sun Microsystems - Beijing China os_obtainmutex(libMutex);
64aff4bce5Syi zhang - Sun Microsystems - Beijing China status = IMA_ERROR_OBJECT_NOT_FOUND;
65aff4bce5Syi zhang - Sun Microsystems - Beijing China
66aff4bce5Syi zhang - Sun Microsystems - Beijing China for (i = 0; i < number_of_plugins; i++) {
67aff4bce5Syi zhang - Sun Microsystems - Beijing China if (plugintable[i].ownerId == oid.ownerId) {
68aff4bce5Syi zhang - Sun Microsystems - Beijing China status = IMA_ERROR_UNEXPECTED_OS_ERROR;
69aff4bce5Syi zhang - Sun Microsystems - Beijing China os_obtainmutex(plugintable[i].pluginMutex);
70aff4bce5Syi zhang - Sun Microsystems - Beijing China #ifdef SOLARIS
71aff4bce5Syi zhang - Sun Microsystems - Beijing China PassFunc = (SUN_IMA_SetTunablePropertiesFn)
72aff4bce5Syi zhang - Sun Microsystems - Beijing China dlsym(plugintable[i].hPlugin,
73aff4bce5Syi zhang - Sun Microsystems - Beijing China "SUN_IMA_SetTunableProperties");
74aff4bce5Syi zhang - Sun Microsystems - Beijing China #endif
75aff4bce5Syi zhang - Sun Microsystems - Beijing China if (PassFunc != NULL) {
76aff4bce5Syi zhang - Sun Microsystems - Beijing China status = PassFunc(oid, param);
77aff4bce5Syi zhang - Sun Microsystems - Beijing China }
78aff4bce5Syi zhang - Sun Microsystems - Beijing China os_releasemutex(plugintable[i].pluginMutex);
79aff4bce5Syi zhang - Sun Microsystems - Beijing China break;
80aff4bce5Syi zhang - Sun Microsystems - Beijing China }
81aff4bce5Syi zhang - Sun Microsystems - Beijing China }
82aff4bce5Syi zhang - Sun Microsystems - Beijing China os_releasemutex(libMutex);
83aff4bce5Syi zhang - Sun Microsystems - Beijing China return (status);
84aff4bce5Syi zhang - Sun Microsystems - Beijing China }
85aff4bce5Syi zhang - Sun Microsystems - Beijing China
SUN_IMA_GetTunableProperties(IMA_OID oid,ISCSI_TUNABLE_PARAM * param)86aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_API IMA_STATUS SUN_IMA_GetTunableProperties(
87aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_OID oid,
88aff4bce5Syi zhang - Sun Microsystems - Beijing China ISCSI_TUNABLE_PARAM *param) {
89aff4bce5Syi zhang - Sun Microsystems - Beijing China SUN_IMA_GetTunablePropertiesFn PassFunc = NULL;
90aff4bce5Syi zhang - Sun Microsystems - Beijing China int i;
91aff4bce5Syi zhang - Sun Microsystems - Beijing China IMA_STATUS status;
92aff4bce5Syi zhang - Sun Microsystems - Beijing China
93aff4bce5Syi zhang - Sun Microsystems - Beijing China if (number_of_plugins == -1) {
94aff4bce5Syi zhang - Sun Microsystems - Beijing China InitLibrary();
95aff4bce5Syi zhang - Sun Microsystems - Beijing China }
96aff4bce5Syi zhang - Sun Microsystems - Beijing China
97aff4bce5Syi zhang - Sun Microsystems - Beijing China if (param == NULL) {
98aff4bce5Syi zhang - Sun Microsystems - Beijing China return (IMA_ERROR_INVALID_PARAMETER);
99aff4bce5Syi zhang - Sun Microsystems - Beijing China }
100aff4bce5Syi zhang - Sun Microsystems - Beijing China
101aff4bce5Syi zhang - Sun Microsystems - Beijing China if ((oid.objectType != IMA_OBJECT_TYPE_LHBA) &&
102aff4bce5Syi zhang - Sun Microsystems - Beijing China (oid.objectType != IMA_OBJECT_TYPE_TARGET)) {
103aff4bce5Syi zhang - Sun Microsystems - Beijing China return (IMA_ERROR_INCORRECT_OBJECT_TYPE);
104aff4bce5Syi zhang - Sun Microsystems - Beijing China }
105aff4bce5Syi zhang - Sun Microsystems - Beijing China
106aff4bce5Syi zhang - Sun Microsystems - Beijing China os_obtainmutex(libMutex);
107aff4bce5Syi zhang - Sun Microsystems - Beijing China status = IMA_ERROR_OBJECT_NOT_FOUND;
108aff4bce5Syi zhang - Sun Microsystems - Beijing China for (i = 0; i < number_of_plugins; i++) {
109aff4bce5Syi zhang - Sun Microsystems - Beijing China status = IMA_ERROR_UNEXPECTED_OS_ERROR;
110aff4bce5Syi zhang - Sun Microsystems - Beijing China if (plugintable[i].ownerId == oid.ownerId) {
111aff4bce5Syi zhang - Sun Microsystems - Beijing China os_obtainmutex(plugintable[i].pluginMutex);
112aff4bce5Syi zhang - Sun Microsystems - Beijing China #ifdef SOLARIS
113aff4bce5Syi zhang - Sun Microsystems - Beijing China PassFunc = (SUN_IMA_GetTunablePropertiesFn)
114aff4bce5Syi zhang - Sun Microsystems - Beijing China dlsym(plugintable[i].hPlugin,
115aff4bce5Syi zhang - Sun Microsystems - Beijing China "SUN_IMA_GetTunableProperties");
116aff4bce5Syi zhang - Sun Microsystems - Beijing China #endif
117aff4bce5Syi zhang - Sun Microsystems - Beijing China if (PassFunc != NULL) {
118aff4bce5Syi zhang - Sun Microsystems - Beijing China status = PassFunc(oid, param);
119aff4bce5Syi zhang - Sun Microsystems - Beijing China }
120aff4bce5Syi zhang - Sun Microsystems - Beijing China os_releasemutex(plugintable[i].pluginMutex);
121aff4bce5Syi zhang - Sun Microsystems - Beijing China break;
122aff4bce5Syi zhang - Sun Microsystems - Beijing China }
123aff4bce5Syi zhang - Sun Microsystems - Beijing China }
124aff4bce5Syi zhang - Sun Microsystems - Beijing China os_releasemutex(libMutex);
125aff4bce5Syi zhang - Sun Microsystems - Beijing China return (status);
126aff4bce5Syi zhang - Sun Microsystems - Beijing China }
127aff4bce5Syi zhang - Sun Microsystems - Beijing China
128*df9cdf10SToomas Soome static void
os_obtainmutex(int semid)129*df9cdf10SToomas Soome os_obtainmutex(int semid)
130*df9cdf10SToomas Soome {
131aff4bce5Syi zhang - Sun Microsystems - Beijing China struct sembuf sem_b;
132aff4bce5Syi zhang - Sun Microsystems - Beijing China
133aff4bce5Syi zhang - Sun Microsystems - Beijing China sem_b.sem_num = 0;
134aff4bce5Syi zhang - Sun Microsystems - Beijing China sem_b.sem_op = -1;
135aff4bce5Syi zhang - Sun Microsystems - Beijing China sem_b.sem_flg = SEM_UNDO;
136*df9cdf10SToomas Soome (void) semop(semid, &sem_b, 1);
137aff4bce5Syi zhang - Sun Microsystems - Beijing China }
138aff4bce5Syi zhang - Sun Microsystems - Beijing China
139*df9cdf10SToomas Soome static void
os_releasemutex(int semid)140*df9cdf10SToomas Soome os_releasemutex(int semid)
141*df9cdf10SToomas Soome {
142aff4bce5Syi zhang - Sun Microsystems - Beijing China struct sembuf sem_b;
143aff4bce5Syi zhang - Sun Microsystems - Beijing China
144aff4bce5Syi zhang - Sun Microsystems - Beijing China sem_b.sem_num = 0;
145aff4bce5Syi zhang - Sun Microsystems - Beijing China sem_b.sem_op = 1;
146aff4bce5Syi zhang - Sun Microsystems - Beijing China sem_b.sem_flg = SEM_UNDO;
147*df9cdf10SToomas Soome (void) semop(semid, &sem_b, 1);
148aff4bce5Syi zhang - Sun Microsystems - Beijing China }
149