This source file includes following definitions.
- orte_dt_unpack_std_cntr
- orte_dt_unpack_job
- orte_dt_unpack_node
- orte_dt_unpack_proc
- orte_dt_unpack_app_context
- orte_dt_unpack_exit_code
- orte_dt_unpack_node_state
- orte_dt_unpack_proc_state
- orte_dt_unpack_job_state
- orte_dt_unpack_map
- orte_dt_unpack_tag
- orte_dt_unpack_daemon_cmd
- orte_dt_unpack_iof_tag
- orte_dt_unpack_attr
- orte_dt_unpack_sig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include "orte_config.h"
24 #include "orte/types.h"
25
26 #include <sys/types.h>
27
28 #include "opal/dss/dss.h"
29 #include "opal/dss/dss_internal.h"
30 #include "opal/mca/hwloc/hwloc-internal.h"
31 #include "opal/util/argv.h"
32
33 #include "orte/mca/errmgr/errmgr.h"
34 #include "orte/runtime/data_type_support/orte_dt_support.h"
35
36
37
38
39 int orte_dt_unpack_std_cntr(opal_buffer_t *buffer, void *dest,
40 int32_t *num_vals, opal_data_type_t type)
41 {
42 int ret;
43
44
45 if (ORTE_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_STD_CNTR_T))) {
46 ORTE_ERROR_LOG(ret);
47 }
48
49 return ret;
50 }
51
52
53
54
55
56
57
58
59
60 int orte_dt_unpack_job(opal_buffer_t *buffer, void *dest,
61 int32_t *num_vals, opal_data_type_t type)
62 {
63 int rc;
64 int32_t i, k, n, count, bookmark;
65 orte_job_t **jobs;
66 orte_app_idx_t j;
67 orte_attribute_t *kv;
68 char *tmp;
69 opal_value_t *val;
70 opal_list_t *cache;
71
72
73 jobs = (orte_job_t**) dest;
74 for (i=0; i < *num_vals; i++) {
75
76
77 jobs[i] = OBJ_NEW(orte_job_t);
78 if (NULL == jobs[i]) {
79 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
80 return ORTE_ERR_OUT_OF_RESOURCE;
81 }
82
83
84 n = 1;
85 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
86 &(jobs[i]->jobid), &n, ORTE_JOBID))) {
87 ORTE_ERROR_LOG(rc);
88 return rc;
89 }
90
91 n = 1;
92 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
93 (&(jobs[i]->flags)), &n, ORTE_JOB_FLAGS_T))) {
94 ORTE_ERROR_LOG(rc);
95 return rc;
96 }
97
98
99 n=1;
100 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count,
101 &n, ORTE_STD_CNTR))) {
102 ORTE_ERROR_LOG(rc);
103 return rc;
104 }
105 for (k=0; k < count; k++) {
106 n=1;
107 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &kv,
108 &n, ORTE_ATTRIBUTE))) {
109 ORTE_ERROR_LOG(rc);
110 return rc;
111 }
112 kv->local = ORTE_ATTR_GLOBAL;
113 opal_list_append(&jobs[i]->attributes, &kv->super);
114 }
115
116 n=1;
117 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count,
118 &n, ORTE_STD_CNTR))) {
119 ORTE_ERROR_LOG(rc);
120 return rc;
121 }
122 if (0 < count){
123 cache = OBJ_NEW(opal_list_t);
124 orte_set_attribute(&jobs[i]->attributes, ORTE_JOB_INFO_CACHE, ORTE_ATTR_LOCAL, (void*)cache, OPAL_PTR);
125 for (k=0; k < count; k++) {
126 n=1;
127 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &val,
128 &n, OPAL_VALUE))) {
129 ORTE_ERROR_LOG(rc);
130 return rc;
131 }
132 opal_list_append(cache, &val->super);
133 }
134 }
135
136
137 n=1;
138 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count, &n, OPAL_INT32))) {
139 ORTE_ERROR_LOG(rc);
140 return rc;
141 }
142 for (k=0; k < count; k++) {
143 n=1;
144 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &tmp, &n, OPAL_STRING))) {
145 ORTE_ERROR_LOG(rc);
146 return rc;
147 }
148 opal_argv_append_nosize(&jobs[i]->personality, tmp);
149 free(tmp);
150 }
151
152
153 n = 1;
154 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
155 (&(jobs[i]->num_apps)), &n, ORTE_APP_IDX))) {
156 ORTE_ERROR_LOG(rc);
157 return rc;
158 }
159
160
161 if (0 < jobs[i]->num_apps) {
162 orte_app_context_t *app;
163 for (j=0; j < jobs[i]->num_apps; j++) {
164 n = 1;
165 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
166 &app, &n, ORTE_APP_CONTEXT))) {
167 ORTE_ERROR_LOG(rc);
168 return rc;
169 }
170 opal_pointer_array_add(jobs[i]->apps, app);
171 }
172 }
173
174
175 n = 1;
176 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
177 (&(jobs[i]->num_procs)), &n, ORTE_VPID))) {
178 ORTE_ERROR_LOG(rc);
179 return rc;
180 }
181 n = 1;
182 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
183 (&(jobs[i]->offset)), &n, ORTE_VPID))) {
184 ORTE_ERROR_LOG(rc);
185 return rc;
186 }
187
188 if (0 < jobs[i]->num_procs) {
189
190
191 if (orte_get_attribute(&jobs[i]->attributes, ORTE_JOB_FULLY_DESCRIBED, NULL, OPAL_BOOL)) {
192 orte_proc_t *proc;
193 for (j=0; j < jobs[i]->num_procs; j++) {
194 n = 1;
195 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
196 &proc, &n, ORTE_PROC))) {
197 ORTE_ERROR_LOG(rc);
198 return rc;
199 }
200 opal_pointer_array_add(jobs[i]->procs, proc);
201 }
202 }
203 }
204
205
206 n = 1;
207 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
208 (&(jobs[i]->stdin_target)), &n, ORTE_VPID))) {
209 ORTE_ERROR_LOG(rc);
210 return rc;
211 }
212
213
214 n = 1;
215 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
216 (&(jobs[i]->total_slots_alloc)), &n, ORTE_STD_CNTR))) {
217 ORTE_ERROR_LOG(rc);
218 return rc;
219 }
220
221
222
223
224 n = 1;
225 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
226 &j, &n, ORTE_STD_CNTR))) {
227 ORTE_ERROR_LOG(rc);
228 return rc;
229 }
230 if (0 < j) {
231
232 n = 1;
233 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
234 (&(jobs[i]->map)), &n, ORTE_JOB_MAP))) {
235 ORTE_ERROR_LOG(rc);
236 return rc;
237 }
238 }
239
240
241 n = 1;
242 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
243 &bookmark, &n, OPAL_INT32))) {
244 ORTE_ERROR_LOG(rc);
245 return rc;
246 }
247 if (0 <= bookmark) {
248
249 jobs[i]->bookmark = (orte_node_t*)opal_pointer_array_get_item(orte_node_pool, bookmark);
250 }
251
252
253 n = 1;
254 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
255 (&(jobs[i]->state)), &n, ORTE_JOB_STATE))) {
256 ORTE_ERROR_LOG(rc);
257 return rc;
258 }
259 }
260
261 return ORTE_SUCCESS;
262 }
263
264
265
266
267 int orte_dt_unpack_node(opal_buffer_t *buffer, void *dest,
268 int32_t *num_vals, opal_data_type_t type)
269 {
270 int rc;
271 int32_t i, n, k, count;
272 orte_node_t **nodes;
273 uint8_t flag;
274 orte_attribute_t *kv;
275
276
277 nodes = (orte_node_t**) dest;
278 for (i=0; i < *num_vals; i++) {
279
280
281 nodes[i] = OBJ_NEW(orte_node_t);
282 if (NULL == nodes[i]) {
283 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
284 return ORTE_ERR_OUT_OF_RESOURCE;
285 }
286
287
288
289
290 n = 1;
291 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
292 &(nodes[i]->name), &n, OPAL_STRING))) {
293 ORTE_ERROR_LOG(rc);
294 return rc;
295 }
296
297
298
299
300 n = 1;
301 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
302 (&(nodes[i]->num_procs)), &n, ORTE_VPID))) {
303 ORTE_ERROR_LOG(rc);
304 return rc;
305 }
306
307
308
309
310 n = 1;
311 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
312 (&flag), &n, OPAL_UINT8))) {
313 ORTE_ERROR_LOG(rc);
314 return rc;
315 }
316 if (flag) {
317 ORTE_FLAG_SET(nodes[i], ORTE_NODE_FLAG_OVERSUBSCRIBED);
318 }
319
320
321 n = 1;
322 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
323 (&(nodes[i]->state)), &n, ORTE_NODE_STATE))) {
324 ORTE_ERROR_LOG(rc);
325 return rc;
326 }
327
328
329 n=1;
330 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count,
331 &n, ORTE_STD_CNTR))) {
332 ORTE_ERROR_LOG(rc);
333 return rc;
334 }
335 for (k=0; k < count; k++) {
336 n=1;
337 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &kv,
338 &n, ORTE_ATTRIBUTE))) {
339 ORTE_ERROR_LOG(rc);
340 return rc;
341 }
342 kv->local = ORTE_ATTR_GLOBAL;
343 opal_list_append(&nodes[i]->attributes, &kv->super);
344 }
345 }
346 return ORTE_SUCCESS;
347 }
348
349
350
351
352 int orte_dt_unpack_proc(opal_buffer_t *buffer, void *dest,
353 int32_t *num_vals, opal_data_type_t type)
354 {
355 int rc;
356 int32_t i, n, count, k;
357 orte_attribute_t *kv;;
358 orte_proc_t **procs;
359
360
361 procs = (orte_proc_t**) dest;
362 for (i=0; i < *num_vals; i++) {
363
364
365 procs[i] = OBJ_NEW(orte_proc_t);
366 if (NULL == procs[i]) {
367 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
368 return ORTE_ERR_OUT_OF_RESOURCE;
369 }
370
371
372 n = 1;
373 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
374 &(procs[i]->name), &n, ORTE_NAME))) {
375 ORTE_ERROR_LOG(rc);
376 return rc;
377 }
378
379
380 n = 1;
381 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
382 (&(procs[i]->parent)), &n, ORTE_VPID))) {
383 ORTE_ERROR_LOG(rc);
384 return rc;
385 }
386
387
388 n = 1;
389 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
390 (&(procs[i]->local_rank)), &n, ORTE_LOCAL_RANK))) {
391 ORTE_ERROR_LOG(rc);
392 return rc;
393 }
394
395
396 n = 1;
397 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
398 (&(procs[i]->node_rank)), &n, ORTE_NODE_RANK))) {
399 ORTE_ERROR_LOG(rc);
400 return rc;
401 }
402
403
404 n = 1;
405 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
406 (&(procs[i]->state)), &n, ORTE_PROC_STATE))) {
407 ORTE_ERROR_LOG(rc);
408 return rc;
409 }
410
411
412 n = 1;
413 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
414 (&(procs[i]->app_idx)), &n, ORTE_STD_CNTR))) {
415 ORTE_ERROR_LOG(rc);
416 return rc;
417 }
418
419
420 n = 1;
421 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
422 (&(procs[i]->app_rank)), &n, OPAL_UINT32))) {
423 ORTE_ERROR_LOG(rc);
424 return rc;
425 }
426
427
428 n=1;
429 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count,
430 &n, ORTE_STD_CNTR))) {
431 ORTE_ERROR_LOG(rc);
432 return rc;
433 }
434 for (k=0; k < count; k++) {
435 n=1;
436 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &kv,
437 &n, ORTE_ATTRIBUTE))) {
438 ORTE_ERROR_LOG(rc);
439 return rc;
440 }
441 kv->local = ORTE_ATTR_GLOBAL;
442 opal_list_append(&procs[i]->attributes, &kv->super);
443 }
444 }
445 return ORTE_SUCCESS;
446 }
447
448
449
450
451 int orte_dt_unpack_app_context(opal_buffer_t *buffer, void *dest,
452 int32_t *num_vals, opal_data_type_t type)
453 {
454 int rc;
455 orte_app_context_t **app_context;
456 int32_t i, max_n=1, count, k;
457 orte_attribute_t *kv;
458
459
460 app_context = (orte_app_context_t**) dest;
461 for (i=0; i < *num_vals; i++) {
462
463
464 app_context[i] = OBJ_NEW(orte_app_context_t);
465 if (NULL == app_context[i]) {
466 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
467 return ORTE_ERR_OUT_OF_RESOURCE;
468 }
469
470
471 max_n = 1;
472 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &(app_context[i]->idx),
473 &max_n, ORTE_STD_CNTR))) {
474 ORTE_ERROR_LOG(rc);
475 return rc;
476 }
477
478
479 max_n = 1;
480 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &(app_context[i]->app),
481 &max_n, OPAL_STRING))) {
482 ORTE_ERROR_LOG(rc);
483 return rc;
484 }
485
486
487 max_n = 1;
488 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &(app_context[i]->num_procs),
489 &max_n, ORTE_STD_CNTR))) {
490 ORTE_ERROR_LOG(rc);
491 return rc;
492 }
493
494
495 max_n = 1;
496 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &(app_context[i]->first_rank),
497 &max_n, ORTE_VPID))) {
498 ORTE_ERROR_LOG(rc);
499 return rc;
500 }
501
502
503 max_n = 1;
504 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count, &max_n, ORTE_STD_CNTR))) {
505 ORTE_ERROR_LOG(rc);
506 return rc;
507 }
508
509
510 if (0 < count) {
511 app_context[i]->argv = (char **)malloc((count+1) * sizeof(char*));
512 if (NULL == app_context[i]->argv) {
513 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
514 return ORTE_ERR_OUT_OF_RESOURCE;
515 }
516 app_context[i]->argv[count] = NULL;
517
518
519 max_n = count;
520 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, app_context[i]->argv, &max_n, OPAL_STRING))) {
521 ORTE_ERROR_LOG(rc);
522 return rc;
523 }
524 }
525
526
527 max_n = 1;
528 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count, &max_n, ORTE_STD_CNTR))) {
529 ORTE_ERROR_LOG(rc);
530 return rc;
531 }
532
533
534 if (0 < count) {
535 app_context[i]->env = (char **)malloc((count+1) * sizeof(char*));
536 if (NULL == app_context[i]->env) {
537 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
538 return ORTE_ERR_OUT_OF_RESOURCE;
539 }
540 app_context[i]->env[count] = NULL;
541
542
543 max_n = count;
544 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, app_context[i]->env, &max_n, OPAL_STRING))) {
545 ORTE_ERROR_LOG(rc);
546 return rc;
547 }
548 }
549
550
551 max_n = 1;
552 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &app_context[i]->cwd,
553 &max_n, OPAL_STRING))) {
554 ORTE_ERROR_LOG(rc);
555 return rc;
556 }
557
558
559 max_n=1;
560 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &count,
561 &max_n, ORTE_STD_CNTR))) {
562 ORTE_ERROR_LOG(rc);
563 return rc;
564 }
565 for (k=0; k < count; k++) {
566 max_n=1;
567 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, &kv,
568 &max_n, ORTE_ATTRIBUTE))) {
569 ORTE_ERROR_LOG(rc);
570 return rc;
571 }
572
573 kv->local = false;
574 opal_list_append(&app_context[i]->attributes, &kv->super);
575 }
576 }
577
578 return ORTE_SUCCESS;
579 }
580
581
582
583
584 int orte_dt_unpack_exit_code(opal_buffer_t *buffer, void *dest,
585 int32_t *num_vals, opal_data_type_t type)
586 {
587 int rc;
588
589 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_EXIT_CODE_T))) {
590 ORTE_ERROR_LOG(rc);
591 }
592
593 return rc;
594 }
595
596
597
598
599 int orte_dt_unpack_node_state(opal_buffer_t *buffer, void *dest,
600 int32_t *num_vals, opal_data_type_t type)
601 {
602 int rc;
603
604 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_NODE_STATE_T))) {
605 ORTE_ERROR_LOG(rc);
606 }
607
608 return rc;
609 }
610
611
612
613
614 int orte_dt_unpack_proc_state(opal_buffer_t *buffer, void *dest,
615 int32_t *num_vals, opal_data_type_t type)
616 {
617 int rc;
618
619 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_PROC_STATE_T))) {
620 ORTE_ERROR_LOG(rc);
621 }
622
623 return rc;
624 }
625
626
627
628
629 int orte_dt_unpack_job_state(opal_buffer_t *buffer, void *dest,
630 int32_t *num_vals, opal_data_type_t type)
631 {
632 int rc;
633
634 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_JOB_STATE_T))) {
635 ORTE_ERROR_LOG(rc);
636 }
637
638 return rc;
639 }
640
641
642
643
644
645
646 int orte_dt_unpack_map(opal_buffer_t *buffer, void *dest,
647 int32_t *num_vals, opal_data_type_t type)
648 {
649 int rc;
650 int32_t i, n;
651 orte_job_map_t **maps;
652
653
654 maps = (orte_job_map_t**) dest;
655 for (i=0; i < *num_vals; i++) {
656
657
658 maps[i] = OBJ_NEW(orte_job_map_t);
659 if (NULL == maps[i]) {
660 ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
661 return ORTE_ERR_OUT_OF_RESOURCE;
662 }
663
664
665 n = 1;
666 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
667 &(maps[i]->req_mapper), &n, OPAL_STRING))) {
668 ORTE_ERROR_LOG(rc);
669 return rc;
670 }
671
672
673 n = 1;
674 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
675 &(maps[i]->last_mapper), &n, OPAL_STRING))) {
676 ORTE_ERROR_LOG(rc);
677 return rc;
678 }
679
680
681 n = 1;
682 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
683 &(maps[i]->mapping), &n, ORTE_MAPPING_POLICY))) {
684 ORTE_ERROR_LOG(rc);
685 return rc;
686 }
687 n = 1;
688 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
689 &(maps[i]->ranking), &n, ORTE_RANKING_POLICY))) {
690 ORTE_ERROR_LOG(rc);
691 return rc;
692 }
693 n = 1;
694 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
695 &(maps[i]->binding), &n, OPAL_BINDING_POLICY))) {
696 ORTE_ERROR_LOG(rc);
697 return rc;
698 }
699
700 n = 1;
701 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
702 &(maps[i]->ppr), &n, OPAL_STRING))) {
703 ORTE_ERROR_LOG(rc);
704 return rc;
705 }
706
707 n = 1;
708 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
709 &(maps[i]->cpus_per_rank), &n, OPAL_INT16))) {
710 ORTE_ERROR_LOG(rc);
711 return rc;
712 }
713
714 n = 1;
715 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
716 &(maps[i]->display_map), &n, OPAL_BOOL))) {
717 ORTE_ERROR_LOG(rc);
718 return rc;
719 }
720
721 n = 1;
722 if (ORTE_SUCCESS != (rc = opal_dss_unpack_buffer(buffer,
723 &(maps[i]->num_nodes), &n, OPAL_UINT32))) {
724 ORTE_ERROR_LOG(rc);
725 return rc;
726 }
727 }
728
729 return ORTE_SUCCESS;
730 }
731
732
733
734
735 int orte_dt_unpack_tag(opal_buffer_t *buffer, void *dest,
736 int32_t *num_vals, opal_data_type_t type)
737 {
738 int ret;
739
740
741 if (ORTE_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_RML_TAG_T))) {
742 ORTE_ERROR_LOG(ret);
743 }
744
745 return ret;
746 }
747
748
749
750
751 int orte_dt_unpack_daemon_cmd(opal_buffer_t *buffer, void *dest, int32_t *num_vals,
752 opal_data_type_t type)
753 {
754 int ret;
755
756
757 ret = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_DAEMON_CMD_T);
758
759 return ret;
760 }
761
762
763
764
765 int orte_dt_unpack_iof_tag(opal_buffer_t *buffer, void *dest, int32_t *num_vals,
766 opal_data_type_t type)
767 {
768 int ret;
769
770
771 ret = opal_dss_unpack_buffer(buffer, dest, num_vals, ORTE_IOF_TAG_T);
772
773 return ret;
774 }
775
776
777
778
779
780 int orte_dt_unpack_attr(opal_buffer_t *buffer, void *dest, int32_t *num_vals,
781 opal_data_type_t type)
782 {
783 orte_attribute_t **ptr;
784 int32_t i, n, m;
785 int ret;
786
787 ptr = (orte_attribute_t **) dest;
788 n = *num_vals;
789
790 for (i = 0; i < n; ++i) {
791
792 ptr[i] = OBJ_NEW(orte_attribute_t);
793 if (NULL == ptr[i]) {
794 return OPAL_ERR_OUT_OF_RESOURCE;
795 }
796
797 m=1;
798 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->key, &m, ORTE_ATTR_KEY_T))) {
799 return ret;
800 }
801 m=1;
802 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->type, &m, OPAL_DATA_TYPE))) {
803 return ret;
804 }
805
806 m=1;
807 switch (ptr[i]->type) {
808 case OPAL_BOOL:
809 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.flag, &m, OPAL_BOOL))) {
810 return ret;
811 }
812 break;
813 case OPAL_BYTE:
814 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.byte, &m, OPAL_BYTE))) {
815 return ret;
816 }
817 break;
818 case OPAL_STRING:
819 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.string, &m, OPAL_STRING))) {
820 return ret;
821 }
822 break;
823 case OPAL_SIZE:
824 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.size, &m, OPAL_SIZE))) {
825 return ret;
826 }
827 break;
828 case OPAL_PID:
829 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.pid, &m, OPAL_PID))) {
830 return ret;
831 }
832 break;
833 case OPAL_INT:
834 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.integer, &m, OPAL_INT))) {
835 return ret;
836 }
837 break;
838 case OPAL_INT8:
839 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.int8, &m, OPAL_INT8))) {
840 return ret;
841 }
842 break;
843 case OPAL_INT16:
844 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.int16, &m, OPAL_INT16))) {
845 return ret;
846 }
847 break;
848 case OPAL_INT32:
849 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.int32, &m, OPAL_INT32))) {
850 return ret;
851 }
852 break;
853 case OPAL_INT64:
854 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.int64, &m, OPAL_INT64))) {
855 return ret;
856 }
857 break;
858 case OPAL_UINT:
859 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.uint, &m, OPAL_UINT))) {
860 return ret;
861 }
862 break;
863 case OPAL_UINT8:
864 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.uint8, &m, OPAL_UINT8))) {
865 return ret;
866 }
867 break;
868 case OPAL_UINT16:
869 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.uint16, &m, OPAL_UINT16))) {
870 return ret;
871 }
872 break;
873 case OPAL_UINT32:
874 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.uint32, &m, OPAL_UINT32))) {
875 return ret;
876 }
877 break;
878 case OPAL_UINT64:
879 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.uint64, &m, OPAL_UINT64))) {
880 return ret;
881 }
882 break;
883 case OPAL_BYTE_OBJECT:
884
885 if (OPAL_SUCCESS != (ret = opal_dss_unpack_int32(buffer, &(ptr[i]->data.bo.size), &m, OPAL_INT32))) {
886 return ret;
887 }
888 if (0 < ptr[i]->data.bo.size) {
889 ptr[i]->data.bo.bytes = (uint8_t*)malloc(ptr[i]->data.bo.size);
890 if (NULL == ptr[i]->data.bo.bytes) {
891 return OPAL_ERR_OUT_OF_RESOURCE;
892 }
893 if (OPAL_SUCCESS != (ret = opal_dss_unpack_byte(buffer, ptr[i]->data.bo.bytes,
894 &(ptr[i]->data.bo.size), OPAL_BYTE))) {
895 return ret;
896 }
897 } else {
898 ptr[i]->data.bo.bytes = NULL;
899 }
900 break;
901 case OPAL_FLOAT:
902 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.fval, &m, OPAL_FLOAT))) {
903 return ret;
904 }
905 break;
906 case OPAL_TIMEVAL:
907 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.tv, &m, OPAL_TIMEVAL))) {
908 return ret;
909 }
910 break;
911 case OPAL_VPID:
912 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.vpid, &m, ORTE_VPID))) {
913 return ret;
914 }
915 break;
916 case OPAL_JOBID:
917 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.jobid, &m, ORTE_JOBID))) {
918 return ret;
919 }
920 break;
921 case OPAL_NAME:
922 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.name, &m, ORTE_NAME))) {
923 return ret;
924 }
925 break;
926 case OPAL_ENVAR:
927 if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.envar, &m, OPAL_ENVAR))) {
928 return ret;
929 }
930 break;
931
932 default:
933 opal_output(0, "PACK-ORTE-ATTR: UNSUPPORTED TYPE");
934 return OPAL_ERROR;
935 }
936 }
937
938 return OPAL_SUCCESS;
939 }
940
941 int orte_dt_unpack_sig(opal_buffer_t *buffer, void *dest, int32_t *num_vals,
942 opal_data_type_t type)
943 {
944 orte_grpcomm_signature_t **ptr;
945 int32_t i, n, cnt;
946 int rc;
947
948 ptr = (orte_grpcomm_signature_t **) dest;
949 n = *num_vals;
950
951 for (i = 0; i < n; ++i) {
952
953 ptr[i] = OBJ_NEW(orte_grpcomm_signature_t);
954 if (NULL == ptr[i]) {
955 return OPAL_ERR_OUT_OF_RESOURCE;
956 }
957
958 cnt = 1;
959 if (OPAL_SUCCESS != (rc = opal_dss.unpack(buffer, &ptr[i]->sz, &cnt, OPAL_SIZE))) {
960 ORTE_ERROR_LOG(rc);
961 return rc;
962 }
963 if (0 < ptr[i]->sz) {
964
965 ptr[i]->signature = (orte_process_name_t*)malloc(ptr[i]->sz * sizeof(orte_process_name_t));
966
967 cnt = ptr[i]->sz;
968 if (OPAL_SUCCESS != (rc = opal_dss.unpack(buffer, ptr[i]->signature, &cnt, ORTE_NAME))) {
969 ORTE_ERROR_LOG(rc);
970 OBJ_RELEASE(ptr[i]);
971 return rc;
972 }
973 }
974 }
975 return ORTE_SUCCESS;
976 }