PageRenderTime 27ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/sblim-cmpi-network-1.4.0/cmpiOSBase_LocalLoopbackPortProvider.c

#
C | 361 lines | 263 code | 61 blank | 37 comment | 84 complexity | 35c604a3fd49740dae09b50057397f40 MD5 | raw file
Possible License(s): EPL-1.0
  1. /*
  2. * cmpiOSBase_LocalLoopbackPortProvider.c
  3. *
  4. * (C) Copyright IBM Corp. 2002, 2009
  5. *
  6. * THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
  7. * ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
  8. * CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
  9. *
  10. * You can obtain a current copy of the Eclipse Public License from
  11. * http://www.opensource.org/licenses/eclipse-1.0.php
  12. *
  13. * Author: Heidi Neumann <heidineu@de.ibm.com>
  14. * Contributors:
  15. *
  16. * Interface Type : Common Manageability Programming Interface ( CMPI )
  17. *
  18. * Description:
  19. *
  20. */
  21. #include <stdlib.h>
  22. #include <stdio.h>
  23. #include <string.h>
  24. #include "cmpidt.h"
  25. #include "cmpift.h"
  26. #include "cmpimacs.h"
  27. #include "OSBase_Common.h"
  28. #include "OSBase_CommonNetwork.h"
  29. #include "cmpiOSBase_Common.h"
  30. #include "cmpiOSBase_LocalLoopbackPort.h"
  31. static const CMPIBroker * _broker;
  32. /* ---------------------------------------------------------------------------*/
  33. /* private declarations */
  34. #ifdef CMPI_VER_100
  35. #define OSBase_LocalLoopbackPortProviderSetInstance OSBase_LocalLoopbackPortProviderModifyInstance
  36. #endif
  37. /* ---------------------------------------------------------------------------*/
  38. /* ---------------------------------------------------------------------------*/
  39. /* Instance Provider Interface */
  40. /* ---------------------------------------------------------------------------*/
  41. CMPIStatus OSBase_LocalLoopbackPortProviderCleanup( CMPIInstanceMI * mi,
  42. const CMPIContext * ctx, CMPIBoolean terminate) {
  43. _OSBASE_TRACE(1,("--- %s CMPI Cleanup() called",_ClassName));
  44. _OSBASE_TRACE(1,("--- %s CMPI Cleanup() exited",_ClassName));
  45. CMReturn(CMPI_RC_OK);
  46. }
  47. CMPIStatus OSBase_LocalLoopbackPortProviderEnumInstanceNames( CMPIInstanceMI * mi,
  48. const CMPIContext * ctx,
  49. const CMPIResult * rslt,
  50. const CMPIObjectPath * ref) {
  51. CMPIObjectPath * op = NULL;
  52. CMPIStatus rc = {CMPI_RC_OK, NULL};
  53. struct netPortList * lptr = NULL ;
  54. struct netPortList * rm = NULL ;
  55. _OSBASE_TRACE(1,("--- %s CMPI EnumInstanceNames() called",_ClassName));
  56. if( enum_all_netPorts( &lptr ) != 0 ) {
  57. CMSetStatusWithChars( _broker, &rc,
  58. CMPI_RC_ERR_FAILED, "Could not list local loopback ports." );
  59. _OSBASE_TRACE(1,("--- %s CMPI EnumInstanceNames() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  60. return rc;
  61. }
  62. rm = lptr;
  63. // iterate port list
  64. if( lptr != NULL ) {
  65. for ( ; lptr && rc.rc == CMPI_RC_OK ; lptr = lptr->next) {
  66. if( lptr->sptr->type == 3 ) {
  67. op = _makePath_LocalLoopbackPort( _broker, ctx, ref, lptr->sptr, &rc );
  68. if( op == NULL || rc.rc != CMPI_RC_OK ) {
  69. if( rc.msg != NULL ) {
  70. _OSBASE_TRACE(1,("--- %s CMPI EnumInstanceNames() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  71. }
  72. CMSetStatusWithChars( _broker, &rc,
  73. CMPI_RC_ERR_FAILED, "Transformation from internal structure to CIM ObjectPath failed." );
  74. if(rm) free_netPortList(rm);
  75. _OSBASE_TRACE(1,("--- %s CMPI EnumInstanceNames() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  76. return rc;
  77. }
  78. else { CMReturnObjectPath( rslt, op ); }
  79. }
  80. }
  81. free_netPortList(rm);
  82. }
  83. CMReturnDone( rslt );
  84. _OSBASE_TRACE(1,("--- %s CMPI EnumInstanceNames() exited",_ClassName));
  85. return rc;
  86. }
  87. CMPIStatus OSBase_LocalLoopbackPortProviderEnumInstances( CMPIInstanceMI * mi,
  88. const CMPIContext * ctx,
  89. const CMPIResult * rslt,
  90. const CMPIObjectPath * ref,
  91. const char ** properties) {
  92. CMPIInstance * ci = NULL;
  93. CMPIStatus rc = {CMPI_RC_OK, NULL};
  94. struct netPortList * lptr = NULL ;
  95. struct netPortList * rm = NULL ;
  96. int cmdrc = 0;
  97. _OSBASE_TRACE(1,("--- %s CMPI EnumInstances() called",_ClassName));
  98. cmdrc = enum_all_netPorts( &lptr );
  99. if( cmdrc != 0 ) {
  100. CMSetStatusWithChars( _broker, &rc,
  101. CMPI_RC_ERR_FAILED, "Could not list local loopback ports." );
  102. _OSBASE_TRACE(1,("--- %s CMPI EnumInstances() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  103. return rc;
  104. }
  105. rm = lptr;
  106. // iterate port list
  107. if( lptr != NULL ) {
  108. for ( ; lptr && rc.rc == CMPI_RC_OK ; lptr = lptr->next) {
  109. if( lptr->sptr->type == 3 ) {
  110. ci = _makeInst_LocalLoopbackPort( _broker, ctx, ref, properties, lptr->sptr, &rc );
  111. if( ci == NULL || rc.rc != CMPI_RC_OK ) {
  112. if( rc.msg != NULL ) {
  113. _OSBASE_TRACE(1,("--- %s CMPI EnumInstances() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  114. }
  115. CMSetStatusWithChars( _broker, &rc,
  116. CMPI_RC_ERR_FAILED, "Transformation from internal structure to CIM Instance failed." );
  117. if(rm) free_netPortList(rm);
  118. _OSBASE_TRACE(1,("--- %s CMPI EnumInstances() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  119. return rc;
  120. }
  121. else { CMReturnInstance( rslt, ci ); }
  122. }
  123. }
  124. if(rm) free_netPortList(rm);
  125. }
  126. CMReturnDone( rslt );
  127. _OSBASE_TRACE(1,("--- %s CMPI EnumInstances() exited",_ClassName));
  128. return rc;
  129. }
  130. CMPIStatus OSBase_LocalLoopbackPortProviderGetInstance( CMPIInstanceMI * mi,
  131. const CMPIContext * ctx,
  132. const CMPIResult * rslt,
  133. const CMPIObjectPath * cop,
  134. const char ** properties) {
  135. CMPIInstance * ci = NULL;
  136. CMPIString * id = NULL;
  137. struct cim_netPort * sptr = NULL;
  138. CMPIStatus rc = {CMPI_RC_OK, NULL};
  139. int cmdrc = 0;
  140. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() called",_ClassName));
  141. _check_system_key_value_pairs( _broker, cop, "SystemCreationClassName", "SystemName", &rc );
  142. if( rc.rc != CMPI_RC_OK ) {
  143. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  144. return rc;
  145. }
  146. id = CMGetKey( cop, "DeviceID", &rc).value.string;
  147. if( id == NULL ) {
  148. CMSetStatusWithChars( _broker, &rc,
  149. CMPI_RC_ERR_FAILED, "Could not get LocalLoopbackPortID." );
  150. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  151. return rc;
  152. }
  153. cmdrc = get_netPort_data( CMGetCharPtr(id) , 2, &sptr );
  154. if( cmdrc != 0 || sptr == NULL ) {
  155. CMSetStatusWithChars( _broker, &rc,
  156. CMPI_RC_ERR_NOT_FOUND, "LocalLoopbackPort does not exist." );
  157. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  158. return rc;
  159. }
  160. ci = _makeInst_LocalLoopbackPort( _broker, ctx, cop, properties, sptr, &rc );
  161. if(sptr) free_netPort(sptr);
  162. if( ci == NULL ) {
  163. if( rc.msg != NULL ) {
  164. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() failed : %s",_ClassName,CMGetCharPtr(rc.msg)));
  165. }
  166. else {
  167. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() failed",_ClassName));
  168. }
  169. return rc;
  170. }
  171. CMReturnInstance( rslt, ci );
  172. CMReturnDone(rslt);
  173. _OSBASE_TRACE(1,("--- %s CMPI GetInstance() exited",_ClassName));
  174. return rc;
  175. }
  176. CMPIStatus OSBase_LocalLoopbackPortProviderCreateInstance( CMPIInstanceMI * mi,
  177. const CMPIContext * ctx,
  178. const CMPIResult * rslt,
  179. const CMPIObjectPath * cop,
  180. const CMPIInstance * ci) {
  181. CMPIStatus rc = {CMPI_RC_OK, NULL};
  182. _OSBASE_TRACE(1,("--- %s CMPI CreateInstance() called",_ClassName));
  183. CMSetStatusWithChars( _broker, &rc,
  184. CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED" );
  185. _OSBASE_TRACE(1,("--- %s CMPI CreateInstance() exited",_ClassName));
  186. return rc;
  187. }
  188. CMPIStatus OSBase_LocalLoopbackPortProviderSetInstance( CMPIInstanceMI * mi,
  189. const CMPIContext * ctx,
  190. const CMPIResult * rslt,
  191. const CMPIObjectPath * cop,
  192. const CMPIInstance * ci,
  193. const char **properties) {
  194. CMPIStatus rc = {CMPI_RC_OK, NULL};
  195. _OSBASE_TRACE(1,("--- %s CMPI SetInstance() called",_ClassName));
  196. CMSetStatusWithChars( _broker, &rc,
  197. CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED" );
  198. _OSBASE_TRACE(1,("--- %s CMPI SetInstance() exited",_ClassName));
  199. return rc;
  200. }
  201. CMPIStatus OSBase_LocalLoopbackPortProviderDeleteInstance( CMPIInstanceMI * mi,
  202. const CMPIContext * ctx,
  203. const CMPIResult * rslt,
  204. const CMPIObjectPath * cop) {
  205. CMPIStatus rc = {CMPI_RC_OK, NULL};
  206. _OSBASE_TRACE(1,("--- %s CMPI DeleteInstance() called",_ClassName));
  207. CMSetStatusWithChars( _broker, &rc,
  208. CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED" );
  209. _OSBASE_TRACE(1,("--- %s CMPI DeleteInstance() exited",_ClassName));
  210. return rc;
  211. }
  212. CMPIStatus OSBase_LocalLoopbackPortProviderExecQuery( CMPIInstanceMI * mi,
  213. const CMPIContext * ctx,
  214. const CMPIResult * rslt,
  215. const CMPIObjectPath * ref,
  216. const char * lang,
  217. const char * query) {
  218. CMPIStatus rc = {CMPI_RC_OK, NULL};
  219. _OSBASE_TRACE(1,("--- %s CMPI ExecQuery() called",_ClassName));
  220. CMSetStatusWithChars( _broker, &rc,
  221. CMPI_RC_ERR_NOT_SUPPORTED, "CIM_ERR_NOT_SUPPORTED" );
  222. _OSBASE_TRACE(1,("--- %s CMPI ExecQuery() exited",_ClassName));
  223. return rc;
  224. }
  225. /* ---------------------------------------------------------------------------*/
  226. /* Method Provider Interface */
  227. /* ---------------------------------------------------------------------------*/
  228. CMPIStatus OSBase_LocalLoopbackPortProviderMethodCleanup( CMPIMethodMI * mi,
  229. const CMPIContext * ctx, CMPIBoolean terminate) {
  230. _OSBASE_TRACE(1,("--- %s CMPI MethodCleanup() called",_ClassName));
  231. _OSBASE_TRACE(1,("--- %s CMPI MethodCleanup() exited",_ClassName));
  232. CMReturn(CMPI_RC_OK);
  233. }
  234. CMPIStatus OSBase_LocalLoopbackPortProviderInvokeMethod( CMPIMethodMI * mi,
  235. const CMPIContext * ctx,
  236. const CMPIResult * rslt,
  237. const CMPIObjectPath * ref,
  238. const char * methodName,
  239. const CMPIArgs * in,
  240. CMPIArgs * out) {
  241. CMPIString * class = NULL;
  242. CMPIStatus rc = {CMPI_RC_OK, NULL};
  243. _OSBASE_TRACE(1,("--- %s CMPI InvokeMethod() called",_ClassName));
  244. class = CMGetClassName(ref, &rc);
  245. if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  246. strcasecmp("SetPowerState",methodName) == 0 ) {
  247. CMSetStatusWithChars( _broker, &rc,
  248. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  249. }
  250. else if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  251. strcasecmp("Reset",methodName) == 0 ) {
  252. CMSetStatusWithChars( _broker, &rc,
  253. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  254. }
  255. else if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  256. strcasecmp("EnableDevice",methodName) == 0 ) {
  257. CMSetStatusWithChars( _broker, &rc,
  258. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  259. }
  260. else if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  261. strcasecmp("OnlineDevice",methodName) == 0 ) {
  262. CMSetStatusWithChars( _broker, &rc,
  263. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  264. }
  265. else if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  266. strcasecmp("QuiesceDevice",methodName) == 0 ) {
  267. CMSetStatusWithChars( _broker, &rc,
  268. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  269. }
  270. else if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  271. strcasecmp("SaveProperties",methodName) == 0 ) {
  272. CMSetStatusWithChars( _broker, &rc,
  273. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  274. }
  275. else if( strcasecmp(CMGetCharPtr(class), _ClassName) == 0 &&
  276. strcasecmp("RestoreProperties",methodName) == 0 ) {
  277. CMSetStatusWithChars( _broker, &rc,
  278. CMPI_RC_ERR_NOT_SUPPORTED, methodName );
  279. }
  280. else {
  281. CMSetStatusWithChars( _broker, &rc,
  282. CMPI_RC_ERR_NOT_FOUND, methodName );
  283. }
  284. _OSBASE_TRACE(1,("--- %s CMPI InvokeMethod() exited",_ClassName));
  285. return rc;
  286. }
  287. /* ---------------------------------------------------------------------------*/
  288. /* Provider Factory */
  289. /* ---------------------------------------------------------------------------*/
  290. CMInstanceMIStub( OSBase_LocalLoopbackPortProvider,
  291. OSBase_LocalLoopbackPortProvider,
  292. _broker,
  293. CMNoHook);
  294. CMMethodMIStub( OSBase_LocalLoopbackPortProvider,
  295. OSBase_LocalLoopbackPortProvider,
  296. _broker,
  297. CMNoHook);
  298. /* ---------------------------------------------------------------------------*/
  299. /* end of cmpiOSBase_LocalLoopbackPortProvider */
  300. /* ---------------------------------------------------------------------------*/