static int _pack_coll_ring_info(pmixp_coll_t *coll, pmixp_coll_ring_msg_hdr_t *ring_hdr, Buf buf) { pmixp_proc_t *procs = coll->pset.procs; size_t nprocs = coll->pset.nprocs; uint32_t type = PMIXP_COLL_TYPE_FENCE_RING; int i; /* 1. store the type of collective */ pack32(type, buf); /* 2. Put the number of ranges */ pack32(nprocs, buf); for (i = 0; i < (int)nprocs; i++) { /* Pack namespace */ packmem(procs->nspace, strlen(procs->nspace) + 1, buf); pack32(procs->rank, buf); } /* 3. pack the ring header info */ packmem((char*)ring_hdr, sizeof(pmixp_coll_ring_msg_hdr_t), buf); return SLURM_SUCCESS; }
static void _dmdx_pmix_cb(pmix_status_t status, char *data, size_t sz, void *cbdata) { dmdx_caddy_t *caddy = (dmdx_caddy_t *)cbdata; Buf buf = pmixp_server_new_buf(); char *addr; int rc; /* setup response header */ _setup_header(buf, DMDX_RESPONSE, caddy->proc.nspace, caddy->proc.rank, status); /* pack the response */ packmem(data, sz, buf); /* setup response address */ addr = pmixp_info_nspace_usock(caddy->sender_ns); /* send the request */ rc = pmixp_server_send(caddy->sender_host, PMIXP_MSG_DMDX, caddy->seq_num, addr, get_buf_data(buf), get_buf_offset(buf), 1); if (SLURM_SUCCESS != rc) { /* not much we can do here. Caller will react by timeout */ PMIXP_ERROR("Cannot send direct modex response to %s", caddy->sender_host); } xfree(addr); free_buf(buf); _dmdx_free_caddy(caddy); }
static void _pack_buffer(void *in, uint16_t rpc_version, Buf buffer) { Buf object = (Buf)in; packmem(get_buf_data(object), get_buf_offset(object), buffer); }
static void io_init_msg_pack(struct slurm_io_init_msg *hdr, Buf buffer) { pack16(hdr->version, buffer); pack32(hdr->nodeid, buffer); pack32(hdr->stdout_objs, buffer); pack32(hdr->stderr_objs, buffer); packmem((char *) hdr->cred_signature, (uint32_t) SLURM_IO_KEY_SIZE, buffer); }
static void _setup_header(Buf buf, dmdx_type_t t, const char *nspace, int rank, int status) { char *str; /* 1. pack message type */ unsigned char type = (char)t; grow_buf(buf, sizeof(char)); pack8(type, buf); /* 2. pack namespace _with_ '\0' (strlen(nspace) + 1)! */ packmem((char *)nspace, strlen(nspace) + 1, buf); /* 3. pack rank */ grow_buf(buf, sizeof(int)); pack32((uint32_t)rank, buf); /* 4. pack my rendezvous point - local namespace * ! _with_ '\0' (strlen(nspace) + 1) ! */ str = pmixp_info_namespace(); packmem(str, strlen(str) + 1, buf); /* 5. pack the status */ pack32((uint32_t)status, buf); }
static void _base_hdr_pack_full(Buf packbuf, pmixp_base_hdr_t *hdr) { if (hdr->ext_flag) { hdr->msgsize += PMIXP_BASE_HDR_EXT_SIZE(pmixp_dconn_ep_len()); } pack32(hdr->magic, packbuf); pack32(hdr->type, packbuf); pack32(hdr->seq, packbuf); pack32(hdr->nodeid, packbuf); pack32(hdr->msgsize, packbuf); pack8(hdr->ext_flag, packbuf); if (hdr->ext_flag) { packmem(pmixp_dconn_ep_data(), pmixp_dconn_ep_len(), packbuf); xassert(get_buf_offset(packbuf) == (PMIXP_BASE_HDR_SIZE + PMIXP_BASE_HDR_EXT_SIZE(pmixp_dconn_ep_len()))); } }
static int _pack_coll_info(pmixp_coll_t *coll, Buf buf) { pmix_proc_t *procs = coll->pset.procs; size_t nprocs = coll->pset.nprocs; uint32_t size; int i; /* 1. store the type of collective */ size = coll->type; pack32(size, buf); /* 2. Put the number of ranges */ pack32(nprocs, buf); for (i = 0; i < (int)nprocs; i++) { /* Pack namespace */ packmem(procs->nspace, strlen(procs->nspace) + 1, buf); pack32(procs->rank, buf); } return SLURM_SUCCESS; }
static size_t _base_hdr_pack_full_samearch(pmixp_base_hdr_t *hdr, void *net) { int offset = 0; if (hdr->ext_flag) { hdr->msgsize += PMIXP_BASE_HDR_EXT_SIZE(pmixp_dconn_ep_len()); } WRITE_HDR_FIELD(net, offset, hdr->magic); WRITE_HDR_FIELD(net, offset, hdr->type); WRITE_HDR_FIELD(net, offset, hdr->seq); WRITE_HDR_FIELD(net, offset, hdr->nodeid); WRITE_HDR_FIELD(net, offset, hdr->msgsize); WRITE_HDR_FIELD(net, offset, hdr->ext_flag); if (hdr->ext_flag) { Buf buf = create_buf(net + offset, PMIXP_BASE_HDR_MAX); packmem(pmixp_dconn_ep_data(), pmixp_dconn_ep_len(), buf); offset += get_buf_offset(buf); buf->head = NULL; free_buf(buf); } return offset; }