This source file includes following definitions.
- opal_value_construct
- opal_value_destruct
- opal_buffer_construct
- opal_buffer_destruct
- opal_dss_type_info_construct
- opal_dss_type_info_destruct
- opal_pstat_construct
- diskstat_cons
- diskstat_dest
- netstat_cons
- netstat_dest
- opal_node_stats_construct
- opal_node_stats_destruct
- opal_envar_construct
- opal_envar_destruct
- opal_dss_register_vars
- opal_dss_close
- opal_dss_open
- opal_dss_structured
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include "opal_config.h"
30
31 #include "opal/runtime/opal.h"
32 #include "opal/mca/base/mca_base_var.h"
33
34 #include "opal/dss/dss_internal.h"
35
36
37
38
39 bool opal_dss_initialized = false;
40 int opal_dss_verbose = -1;
41 int opal_dss_initial_size = -1;
42 int opal_dss_threshold_size = -1;
43 opal_pointer_array_t opal_dss_types = {{0}};
44 opal_data_type_t opal_dss_num_reg_types = {0};
45 static opal_dss_buffer_type_t default_buf_type = OPAL_DSS_BUFFER_NON_DESC;
46
47
48 static int opal_dss_group_id = -1;
49
50 static mca_base_var_enum_value_t buffer_type_values[] = {
51 {OPAL_DSS_BUFFER_NON_DESC, "non-described"},
52 {OPAL_DSS_BUFFER_FULLY_DESC, "described"},
53 {0, NULL}
54 };
55
56 opal_dss_t opal_dss = {
57 opal_dss_pack,
58 opal_dss_unpack,
59 opal_dss_copy,
60 opal_dss_compare,
61 opal_dss_print,
62 opal_dss_structured,
63 opal_dss_peek,
64 opal_dss_unload,
65 opal_dss_load,
66 opal_dss_copy_payload,
67 opal_dss_register,
68 opal_dss_lookup_data_type,
69 opal_dss_dump_data_types,
70 opal_dss_dump
71 };
72
73
74
75
76
77 static void opal_value_construct(opal_value_t* ptr)
78 {
79 ptr->key = NULL;
80 ptr->type = OPAL_UNDEF;
81 memset(&ptr->data, 0, sizeof(ptr->data));
82 }
83 static void opal_value_destruct(opal_value_t* ptr)
84 {
85 if (NULL != ptr->key) {
86 free(ptr->key);
87 }
88 if (OPAL_STRING == ptr->type &&
89 NULL != ptr->data.string) {
90 free(ptr->data.string);
91 }
92 if (OPAL_BYTE_OBJECT == ptr->type &&
93 NULL != ptr->data.bo.bytes) {
94 free(ptr->data.bo.bytes);
95 }
96 }
97 OBJ_CLASS_INSTANCE(opal_value_t,
98 opal_list_item_t,
99 opal_value_construct,
100 opal_value_destruct);
101
102
103 static void opal_buffer_construct (opal_buffer_t* buffer)
104 {
105
106 buffer->type = default_buf_type;
107
108
109
110 buffer->base_ptr = buffer->pack_ptr = buffer->unpack_ptr = NULL;
111 buffer->bytes_allocated = buffer->bytes_used = 0;
112 }
113
114 static void opal_buffer_destruct (opal_buffer_t* buffer)
115 {
116 if (NULL != buffer->base_ptr) {
117 free (buffer->base_ptr);
118 }
119 }
120
121 OBJ_CLASS_INSTANCE(opal_buffer_t,
122 opal_object_t,
123 opal_buffer_construct,
124 opal_buffer_destruct);
125
126
127 static void opal_dss_type_info_construct(opal_dss_type_info_t *obj)
128 {
129 obj->odti_name = NULL;
130 obj->odti_pack_fn = NULL;
131 obj->odti_unpack_fn = NULL;
132 obj->odti_copy_fn = NULL;
133 obj->odti_compare_fn = NULL;
134 obj->odti_print_fn = NULL;
135 obj->odti_structured = false;
136 }
137
138 static void opal_dss_type_info_destruct(opal_dss_type_info_t *obj)
139 {
140 if (NULL != obj->odti_name) {
141 free(obj->odti_name);
142 }
143 }
144
145 OBJ_CLASS_INSTANCE(opal_dss_type_info_t, opal_object_t,
146 opal_dss_type_info_construct,
147 opal_dss_type_info_destruct);
148
149
150 static void opal_pstat_construct(opal_pstats_t *obj)
151 {
152 memset(obj->node, 0, sizeof(obj->node));
153 memset(obj->cmd, 0, sizeof(obj->cmd));
154 obj->rank = 0;
155 obj->pid = 0;
156 obj->state[0] = 'U';
157 obj->state[1] = '\0';
158 obj->percent_cpu = 0.0;
159 obj->time.tv_sec = 0;
160 obj->time.tv_usec = 0;
161 obj->priority = -1;
162 obj->num_threads = -1;
163 obj->pss = 0.0;
164 obj->vsize = 0.0;
165 obj->rss = 0.0;
166 obj->peak_vsize = 0.0;
167 obj->processor = -1;
168 obj->sample_time.tv_sec = 0;
169 obj->sample_time.tv_usec = 0;
170 }
171 OBJ_CLASS_INSTANCE(opal_pstats_t, opal_list_item_t,
172 opal_pstat_construct,
173 NULL);
174
175 static void diskstat_cons(opal_diskstats_t *ptr)
176 {
177 ptr->disk = NULL;
178 }
179 static void diskstat_dest(opal_diskstats_t *ptr)
180 {
181 if (NULL != ptr->disk) {
182 free(ptr->disk);
183 }
184 }
185 OBJ_CLASS_INSTANCE(opal_diskstats_t,
186 opal_list_item_t,
187 diskstat_cons, diskstat_dest);
188
189 static void netstat_cons(opal_netstats_t *ptr)
190 {
191 ptr->net_interface = NULL;
192 }
193 static void netstat_dest(opal_netstats_t *ptr)
194 {
195 if (NULL != ptr->net_interface) {
196 free(ptr->net_interface);
197 }
198 }
199 OBJ_CLASS_INSTANCE(opal_netstats_t,
200 opal_list_item_t,
201 netstat_cons, netstat_dest);
202
203 static void opal_node_stats_construct(opal_node_stats_t *obj)
204 {
205 obj->la = 0.0;
206 obj->la5 = 0.0;
207 obj->la15 = 0.0;
208 obj->total_mem = 0;
209 obj->free_mem = 0.0;
210 obj->buffers = 0.0;
211 obj->cached = 0.0;
212 obj->swap_cached = 0.0;
213 obj->swap_total = 0.0;
214 obj->swap_free = 0.0;
215 obj->mapped = 0.0;
216 obj->sample_time.tv_sec = 0;
217 obj->sample_time.tv_usec = 0;
218 OBJ_CONSTRUCT(&obj->diskstats, opal_list_t);
219 OBJ_CONSTRUCT(&obj->netstats, opal_list_t);
220 }
221 static void opal_node_stats_destruct(opal_node_stats_t *obj)
222 {
223 opal_list_item_t *item;
224 while (NULL != (item = opal_list_remove_first(&obj->diskstats))) {
225 OBJ_RELEASE(item);
226 }
227 OBJ_DESTRUCT(&obj->diskstats);
228 while (NULL != (item = opal_list_remove_first(&obj->netstats))) {
229 OBJ_RELEASE(item);
230 }
231 OBJ_DESTRUCT(&obj->netstats);
232 }
233 OBJ_CLASS_INSTANCE(opal_node_stats_t, opal_object_t,
234 opal_node_stats_construct,
235 opal_node_stats_destruct);
236
237
238 static void opal_envar_construct(opal_envar_t *obj)
239 {
240 obj->envar = NULL;
241 obj->value = NULL;
242 obj->separator = '\0';
243 }
244 static void opal_envar_destruct(opal_envar_t *obj)
245 {
246 if (NULL != obj->envar) {
247 free(obj->envar);
248 }
249 if (NULL != obj->value) {
250 free(obj->value);
251 }
252 }
253 OBJ_CLASS_INSTANCE(opal_envar_t,
254 opal_list_item_t,
255 opal_envar_construct,
256 opal_envar_destruct);
257
258 int opal_dss_register_vars (void)
259 {
260 mca_base_var_enum_t *new_enum;
261 char *enviro_val;
262 int ret;
263
264 enviro_val = getenv("OPAL_dss_debug");
265 if (NULL != enviro_val) {
266 opal_dss_verbose = 0;
267 }
268
269 opal_dss_group_id = mca_base_var_group_register ("opal", "dss", NULL, NULL);
270
271
272
273
274
275 #if OPAL_ENABLE_DEBUG
276 default_buf_type = OPAL_DSS_BUFFER_FULLY_DESC;
277 #else
278 default_buf_type = OPAL_DSS_BUFFER_NON_DESC;
279 #endif
280
281 ret = mca_base_var_enum_create ("buffer types", buffer_type_values, &new_enum);
282 if (OPAL_SUCCESS != ret) {
283 fprintf (stderr, "Fail A\n");
284 return ret;
285 }
286
287 ret = mca_base_var_register ("opal", "dss", NULL, "buffer_type",
288 "Set the default mode for OpenRTE buffers (0=non-described, 1=described)",
289 MCA_BASE_VAR_TYPE_INT, new_enum, 0, MCA_BASE_VAR_FLAG_SETTABLE,
290 OPAL_INFO_LVL_8, MCA_BASE_VAR_SCOPE_ALL_EQ,
291 &default_buf_type);
292 OBJ_RELEASE(new_enum);
293 if (0 > ret) {
294 return ret;
295 }
296
297
298 opal_dss_initial_size = OPAL_DSS_DEFAULT_INITIAL_SIZE;
299 ret = mca_base_var_register ("opal", "dss", NULL, "buffer_initial_size", NULL,
300 MCA_BASE_VAR_TYPE_INT, NULL, 0, MCA_BASE_VAR_FLAG_SETTABLE,
301 OPAL_INFO_LVL_8, MCA_BASE_VAR_SCOPE_ALL_EQ,
302 &opal_dss_initial_size);
303 if (0 > ret) {
304 return ret;
305 }
306
307
308
309 opal_dss_threshold_size = OPAL_DSS_DEFAULT_THRESHOLD_SIZE;
310 ret = mca_base_var_register ("opal", "dss", NULL, "buffer_threshold_size", NULL,
311 MCA_BASE_VAR_TYPE_INT, NULL, 0, MCA_BASE_VAR_FLAG_SETTABLE,
312 OPAL_INFO_LVL_8, MCA_BASE_VAR_SCOPE_ALL_EQ,
313 &opal_dss_threshold_size);
314
315 return (0 > ret) ? ret : OPAL_SUCCESS;
316 }
317
318 static void opal_dss_close (void)
319 {
320 opal_dss_initialized = false;
321
322 for (int i = 0 ; i < opal_pointer_array_get_size(&opal_dss_types) ; ++i) {
323 opal_dss_type_info_t *info = (opal_dss_type_info_t*)opal_pointer_array_get_item(&opal_dss_types, i);
324 if (NULL != info) {
325 opal_pointer_array_set_item(&opal_dss_types, i, NULL);
326 OBJ_RELEASE(info);
327 }
328 }
329
330 OBJ_DESTRUCT(&opal_dss_types);
331 }
332
333 int opal_dss_open(void)
334 {
335 int rc;
336 opal_data_type_t tmp;
337
338 if (opal_dss_initialized) {
339 return OPAL_SUCCESS;
340 }
341
342
343 mca_base_var_group_set_var_flag (opal_dss_group_id, MCA_BASE_VAR_FLAG_SETTABLE, false);
344
345
346 OBJ_CONSTRUCT(&opal_dss_types, opal_pointer_array_t);
347 if (OPAL_SUCCESS != (rc = opal_pointer_array_init(&opal_dss_types,
348 OPAL_DSS_ID_DYNAMIC,
349 OPAL_DSS_ID_MAX,
350 OPAL_DSS_ID_MAX))) {
351 return rc;
352 }
353 opal_dss_num_reg_types = 0;
354
355
356
357 tmp = OPAL_NULL;
358 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_null,
359 opal_dss_unpack_null,
360 (opal_dss_copy_fn_t)opal_dss_copy_null,
361 (opal_dss_compare_fn_t)opal_dss_compare_null,
362 (opal_dss_print_fn_t)opal_dss_print_null,
363 OPAL_DSS_UNSTRUCTURED,
364 "OPAL_NULL", &tmp))) {
365 return rc;
366 }
367 tmp = OPAL_BYTE;
368 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_byte,
369 opal_dss_unpack_byte,
370 (opal_dss_copy_fn_t)opal_dss_std_copy,
371 (opal_dss_compare_fn_t)opal_dss_compare_byte,
372 (opal_dss_print_fn_t)opal_dss_print_byte,
373 OPAL_DSS_UNSTRUCTURED,
374 "OPAL_BYTE", &tmp))) {
375 return rc;
376 }
377 tmp = OPAL_BOOL;
378 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_bool,
379 opal_dss_unpack_bool,
380 (opal_dss_copy_fn_t)opal_dss_std_copy,
381 (opal_dss_compare_fn_t)opal_dss_compare_bool,
382 (opal_dss_print_fn_t)opal_dss_print_bool,
383 OPAL_DSS_UNSTRUCTURED,
384 "OPAL_BOOL", &tmp))) {
385 return rc;
386 }
387 tmp = OPAL_INT;
388 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int,
389 opal_dss_unpack_int,
390 (opal_dss_copy_fn_t)opal_dss_std_copy,
391 (opal_dss_compare_fn_t)opal_dss_compare_int,
392 (opal_dss_print_fn_t)opal_dss_print_int,
393 OPAL_DSS_UNSTRUCTURED,
394 "OPAL_INT", &tmp))) {
395 return rc;
396 }
397 tmp = OPAL_UINT;
398 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int,
399 opal_dss_unpack_int,
400 (opal_dss_copy_fn_t)opal_dss_std_copy,
401 (opal_dss_compare_fn_t)opal_dss_compare_uint,
402 (opal_dss_print_fn_t)opal_dss_print_uint,
403 OPAL_DSS_UNSTRUCTURED,
404 "OPAL_UINT", &tmp))) {
405 return rc;
406 }
407 tmp = OPAL_INT8;
408 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_byte,
409 opal_dss_unpack_byte,
410 (opal_dss_copy_fn_t)opal_dss_std_copy,
411 (opal_dss_compare_fn_t)opal_dss_compare_int8,
412 (opal_dss_print_fn_t)opal_dss_print_int8,
413 OPAL_DSS_UNSTRUCTURED,
414 "OPAL_INT8", &tmp))) {
415 return rc;
416 }
417 tmp = OPAL_UINT8;
418 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_byte,
419 opal_dss_unpack_byte,
420 (opal_dss_copy_fn_t)opal_dss_std_copy,
421 (opal_dss_compare_fn_t)opal_dss_compare_uint8,
422 (opal_dss_print_fn_t)opal_dss_print_uint8,
423 OPAL_DSS_UNSTRUCTURED,
424 "OPAL_UINT8", &tmp))) {
425 return rc;
426 }
427 tmp = OPAL_INT16;
428 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int16,
429 opal_dss_unpack_int16,
430 (opal_dss_copy_fn_t)opal_dss_std_copy,
431 (opal_dss_compare_fn_t)opal_dss_compare_int16,
432 (opal_dss_print_fn_t)opal_dss_print_int16,
433 OPAL_DSS_UNSTRUCTURED,
434 "OPAL_INT16", &tmp))) {
435 return rc;
436 }
437 tmp = OPAL_UINT16;
438 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int16,
439 opal_dss_unpack_int16,
440 (opal_dss_copy_fn_t)opal_dss_std_copy,
441 (opal_dss_compare_fn_t)opal_dss_compare_uint16,
442 (opal_dss_print_fn_t)opal_dss_print_uint16,
443 OPAL_DSS_UNSTRUCTURED,
444 "OPAL_UINT16", &tmp))) {
445 return rc;
446 }
447 tmp = OPAL_INT32;
448 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int32,
449 opal_dss_unpack_int32,
450 (opal_dss_copy_fn_t)opal_dss_std_copy,
451 (opal_dss_compare_fn_t)opal_dss_compare_int32,
452 (opal_dss_print_fn_t)opal_dss_print_int32,
453 OPAL_DSS_UNSTRUCTURED,
454 "OPAL_INT32", &tmp))) {
455 return rc;
456 }
457 tmp = OPAL_UINT32;
458 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int32,
459 opal_dss_unpack_int32,
460 (opal_dss_copy_fn_t)opal_dss_std_copy,
461 (opal_dss_compare_fn_t)opal_dss_compare_uint32,
462 (opal_dss_print_fn_t)opal_dss_print_uint32,
463 OPAL_DSS_UNSTRUCTURED,
464 "OPAL_UINT32", &tmp))) {
465 return rc;
466 }
467 tmp = OPAL_INT64;
468 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int64,
469 opal_dss_unpack_int64,
470 (opal_dss_copy_fn_t)opal_dss_std_copy,
471 (opal_dss_compare_fn_t)opal_dss_compare_int64,
472 (opal_dss_print_fn_t)opal_dss_print_int64,
473 OPAL_DSS_UNSTRUCTURED,
474 "OPAL_INT64", &tmp))) {
475 return rc;
476 }
477 tmp = OPAL_UINT64;
478 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_int64,
479 opal_dss_unpack_int64,
480 (opal_dss_copy_fn_t)opal_dss_std_copy,
481 (opal_dss_compare_fn_t)opal_dss_compare_uint64,
482 (opal_dss_print_fn_t)opal_dss_print_uint64,
483 OPAL_DSS_UNSTRUCTURED,
484 "OPAL_UINT64", &tmp))) {
485 return rc;
486 }
487 tmp = OPAL_SIZE;
488 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_sizet,
489 opal_dss_unpack_sizet,
490 (opal_dss_copy_fn_t)opal_dss_std_copy,
491 (opal_dss_compare_fn_t)opal_dss_compare_size,
492 (opal_dss_print_fn_t)opal_dss_print_size,
493 OPAL_DSS_UNSTRUCTURED,
494 "OPAL_SIZE", &tmp))) {
495 return rc;
496 }
497 tmp = OPAL_PID;
498 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_pid,
499 opal_dss_unpack_pid,
500 (opal_dss_copy_fn_t)opal_dss_std_copy,
501 (opal_dss_compare_fn_t)opal_dss_compare_pid,
502 (opal_dss_print_fn_t)opal_dss_print_pid,
503 OPAL_DSS_UNSTRUCTURED,
504 "OPAL_PID", &tmp))) {
505 return rc;
506 }
507 tmp = OPAL_STRING;
508 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_string,
509 opal_dss_unpack_string,
510 (opal_dss_copy_fn_t)opal_dss_copy_string,
511 (opal_dss_compare_fn_t)opal_dss_compare_string,
512 (opal_dss_print_fn_t)opal_dss_print_string,
513 OPAL_DSS_STRUCTURED,
514 "OPAL_STRING", &tmp))) {
515 return rc;
516 }
517 tmp = OPAL_DATA_TYPE;
518 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_data_type,
519 opal_dss_unpack_data_type,
520 (opal_dss_copy_fn_t)opal_dss_std_copy,
521 (opal_dss_compare_fn_t)opal_dss_compare_dt,
522 (opal_dss_print_fn_t)opal_dss_print_data_type,
523 OPAL_DSS_UNSTRUCTURED,
524 "OPAL_DATA_TYPE", &tmp))) {
525 return rc;
526 }
527
528 tmp = OPAL_BYTE_OBJECT;
529 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_byte_object,
530 opal_dss_unpack_byte_object,
531 (opal_dss_copy_fn_t)opal_dss_copy_byte_object,
532 (opal_dss_compare_fn_t)opal_dss_compare_byte_object,
533 (opal_dss_print_fn_t)opal_dss_print_byte_object,
534 OPAL_DSS_STRUCTURED,
535 "OPAL_BYTE_OBJECT", &tmp))) {
536 return rc;
537 }
538
539 tmp = OPAL_PSTAT;
540 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_pstat,
541 opal_dss_unpack_pstat,
542 (opal_dss_copy_fn_t)opal_dss_copy_pstat,
543 (opal_dss_compare_fn_t)opal_dss_compare_pstat,
544 (opal_dss_print_fn_t)opal_dss_print_pstat,
545 OPAL_DSS_STRUCTURED,
546 "OPAL_PSTAT", &tmp))) {
547 return rc;
548 }
549
550 tmp = OPAL_NODE_STAT;
551 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_node_stat,
552 opal_dss_unpack_node_stat,
553 (opal_dss_copy_fn_t)opal_dss_copy_node_stat,
554 (opal_dss_compare_fn_t)opal_dss_compare_node_stat,
555 (opal_dss_print_fn_t)opal_dss_print_node_stat,
556 OPAL_DSS_STRUCTURED,
557 "OPAL_NODE_STAT", &tmp))) {
558 return rc;
559 }
560 tmp = OPAL_VALUE;
561 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_value,
562 opal_dss_unpack_value,
563 (opal_dss_copy_fn_t)opal_dss_copy_value,
564 (opal_dss_compare_fn_t)opal_dss_compare_value,
565 (opal_dss_print_fn_t)opal_dss_print_value,
566 OPAL_DSS_STRUCTURED,
567 "OPAL_VALUE", &tmp))) {
568 return rc;
569 }
570 tmp = OPAL_BUFFER;
571 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_buffer_contents,
572 opal_dss_unpack_buffer_contents,
573 (opal_dss_copy_fn_t)opal_dss_copy_buffer_contents,
574 (opal_dss_compare_fn_t)opal_dss_compare_buffer_contents,
575 (opal_dss_print_fn_t)opal_dss_print_buffer_contents,
576 OPAL_DSS_STRUCTURED,
577 "OPAL_BUFFER", &tmp))) {
578 return rc;
579 }
580 tmp = OPAL_FLOAT;
581 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_float,
582 opal_dss_unpack_float,
583 (opal_dss_copy_fn_t)opal_dss_std_copy,
584 (opal_dss_compare_fn_t)opal_dss_compare_float,
585 (opal_dss_print_fn_t)opal_dss_print_float,
586 OPAL_DSS_UNSTRUCTURED,
587 "OPAL_FLOAT", &tmp))) {
588 return rc;
589 }
590 tmp = OPAL_DOUBLE;
591 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_double,
592 opal_dss_unpack_double,
593 (opal_dss_copy_fn_t)opal_dss_std_copy,
594 (opal_dss_compare_fn_t)opal_dss_compare_double,
595 (opal_dss_print_fn_t)opal_dss_print_double,
596 OPAL_DSS_UNSTRUCTURED,
597 "OPAL_DOUBLE", &tmp))) {
598 return rc;
599 }
600 tmp = OPAL_TIMEVAL;
601 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_timeval,
602 opal_dss_unpack_timeval,
603 (opal_dss_copy_fn_t)opal_dss_std_copy,
604 (opal_dss_compare_fn_t)opal_dss_compare_timeval,
605 (opal_dss_print_fn_t)opal_dss_print_timeval,
606 OPAL_DSS_UNSTRUCTURED,
607 "OPAL_TIMEVAL", &tmp))) {
608 return rc;
609 }
610 tmp = OPAL_TIME;
611 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_time,
612 opal_dss_unpack_time,
613 (opal_dss_copy_fn_t)opal_dss_std_copy,
614 (opal_dss_compare_fn_t)opal_dss_compare_time,
615 (opal_dss_print_fn_t)opal_dss_print_time,
616 OPAL_DSS_UNSTRUCTURED,
617 "OPAL_TIME", &tmp))) {
618 return rc;
619 }
620
621 tmp = OPAL_NAME;
622 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_name,
623 opal_dss_unpack_name,
624 (opal_dss_copy_fn_t)opal_dss_copy_name,
625 (opal_dss_compare_fn_t)opal_dss_compare_name,
626 (opal_dss_print_fn_t)opal_dss_print_name,
627 OPAL_DSS_UNSTRUCTURED,
628 "OPAL_NAME", &tmp))) {
629 return rc;
630 }
631
632 tmp = OPAL_JOBID;
633 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_jobid,
634 opal_dss_unpack_jobid,
635 (opal_dss_copy_fn_t)opal_dss_copy_jobid,
636 (opal_dss_compare_fn_t)opal_dss_compare_jobid,
637 (opal_dss_print_fn_t)opal_dss_print_jobid,
638 OPAL_DSS_UNSTRUCTURED,
639 "OPAL_JOBID", &tmp))) {
640 return rc;
641 }
642
643 tmp = OPAL_VPID;
644 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_vpid,
645 opal_dss_unpack_vpid,
646 (opal_dss_copy_fn_t)opal_dss_copy_vpid,
647 (opal_dss_compare_fn_t)opal_dss_compare_vpid,
648 (opal_dss_print_fn_t)opal_dss_print_vpid,
649 OPAL_DSS_UNSTRUCTURED,
650 "OPAL_VPID", &tmp))) {
651 return rc;
652 }
653
654
655 tmp = OPAL_STATUS;
656 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_status,
657 opal_dss_unpack_status,
658 (opal_dss_copy_fn_t)opal_dss_std_copy,
659 (opal_dss_compare_fn_t)opal_dss_compare_status,
660 (opal_dss_print_fn_t)opal_dss_print_status,
661 OPAL_DSS_UNSTRUCTURED,
662 "OPAL_STATUS", &tmp))) {
663 return rc;
664 }
665
666 tmp = OPAL_ENVAR;
667 if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_envar,
668 opal_dss_unpack_envar,
669 (opal_dss_copy_fn_t)opal_dss_copy_envar,
670 (opal_dss_compare_fn_t)opal_dss_compare_envar,
671 (opal_dss_print_fn_t)opal_dss_print_envar,
672 OPAL_DSS_UNSTRUCTURED,
673 "OPAL_ENVAR", &tmp))) {
674 return rc;
675 }
676
677
678 opal_dss_initialized = true;
679
680 opal_finalize_register_cleanup (opal_dss_close);
681
682 return OPAL_SUCCESS;
683 }
684
685 bool opal_dss_structured(opal_data_type_t type)
686 {
687 int i;
688
689
690 for (i = 0 ; i < opal_dss_types.size ; ++i) {
691 opal_dss_type_info_t *info = (opal_dss_type_info_t*)opal_pointer_array_get_item(&opal_dss_types, i);
692 if (NULL != info && info->odti_type == type) {
693 return info->odti_structured;
694 }
695 }
696
697
698 return false;
699 }