static int _pack_node_subgrp(node_subgrp_t *subgrp, Buf buffer, uint16_t protocol_version) { if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) { pack_bit_fmt(subgrp->bitmap, buffer); pack16(subgrp->cnode_cnt, buffer); pack16(subgrp->state, buffer); } return SLURM_SUCCESS; }
/* * pack_part - dump all configuration information about a specific partition * in machine independent form (for network transmission) * IN part_ptr - pointer to partition for which information is requested * IN/OUT buffer - buffer in which data is placed, pointers automatically * updated * global: default_part_loc - pointer to the default partition * NOTE: if you make any changes here be sure to make the corresponding changes * to _unpack_partition_info_members() in common/slurm_protocol_pack.c */ void pack_part(struct part_record *part_ptr, Buf buffer, uint16_t protocol_version) { uint32_t altered; if (protocol_version >= SLURM_2_6_PROTOCOL_VERSION) { if (default_part_loc == part_ptr) part_ptr->flags |= PART_FLAG_DEFAULT; else part_ptr->flags &= (~PART_FLAG_DEFAULT); packstr(part_ptr->name, buffer); pack32(part_ptr->grace_time, buffer); pack32(part_ptr->max_time, buffer); pack32(part_ptr->default_time, buffer); pack32(part_ptr->max_nodes_orig, buffer); pack32(part_ptr->min_nodes_orig, buffer); altered = part_ptr->total_nodes; select_g_alter_node_cnt(SELECT_APPLY_NODE_MAX_OFFSET, &altered); pack32(altered, buffer); pack32(part_ptr->total_cpus, buffer); pack32(part_ptr->def_mem_per_cpu, buffer); pack32(part_ptr->max_cpus_per_node, buffer); pack32(part_ptr->max_mem_per_cpu, buffer); pack16(part_ptr->flags, buffer); pack16(part_ptr->max_share, buffer); pack16(part_ptr->preempt_mode, buffer); pack16(part_ptr->priority, buffer); pack16(part_ptr->state_up, buffer); pack16(part_ptr->cr_type, buffer); packstr(part_ptr->allow_groups, buffer); packstr(part_ptr->allow_alloc_nodes, buffer); packstr(part_ptr->alternate, buffer); packstr(part_ptr->nodes, buffer); pack_bit_fmt(part_ptr->node_bitmap, buffer); } else if (protocol_version >= SLURM_2_4_PROTOCOL_VERSION) { if (default_part_loc == part_ptr) part_ptr->flags |= PART_FLAG_DEFAULT; else part_ptr->flags &= (~PART_FLAG_DEFAULT); packstr(part_ptr->name, buffer); pack32(part_ptr->grace_time, buffer); pack32(part_ptr->max_time, buffer); pack32(part_ptr->default_time, buffer); pack32(part_ptr->max_nodes_orig, buffer); pack32(part_ptr->min_nodes_orig, buffer); altered = part_ptr->total_nodes; select_g_alter_node_cnt(SELECT_APPLY_NODE_MAX_OFFSET, &altered); pack32(altered, buffer); pack32(part_ptr->total_cpus, buffer); pack32(part_ptr->def_mem_per_cpu, buffer); pack32(part_ptr->max_mem_per_cpu, buffer); pack16(part_ptr->flags, buffer); pack16(part_ptr->max_share, buffer); pack16(part_ptr->preempt_mode, buffer); pack16(part_ptr->priority, buffer); pack16(part_ptr->state_up, buffer); packstr(part_ptr->allow_groups, buffer); packstr(part_ptr->allow_alloc_nodes, buffer); packstr(part_ptr->alternate, buffer); packstr(part_ptr->nodes, buffer); pack_bit_fmt(part_ptr->node_bitmap, buffer); } else { error("pack_part: protocol_version " "%hu not supported", protocol_version); } }
/* pack a select job credential into a buffer in machine independent form * IN jobinfo - the select job credential to be saved * OUT buffer - buffer with select credential appended * IN protocol_version - slurm protocol version of client * RET - slurm error code */ extern int pack_select_jobinfo(select_jobinfo_t *jobinfo, Buf buffer, uint16_t protocol_version) { int i; int dims = slurmdb_setup_cluster_dims(); if (protocol_version >= SLURM_2_5_PROTOCOL_VERSION) { if (jobinfo) { if (jobinfo->dim_cnt) dims = jobinfo->dim_cnt; else if (bg_recover != NOT_FROM_CONTROLLER) xassert(0); pack16(dims, buffer); /* NOTE: If new elements are added here, make sure to * add equivalant pack of zeros below for NULL * pointer */ for (i=0; i<dims; i++) { pack16(jobinfo->geometry[i], buffer); pack16(jobinfo->conn_type[i], buffer); pack16(jobinfo->start_loc[i], buffer); } pack16(jobinfo->reboot, buffer); pack16(jobinfo->rotate, buffer); pack32(jobinfo->block_cnode_cnt, buffer); pack32(jobinfo->cnode_cnt, buffer); packstr(jobinfo->bg_block_id, buffer); packstr(jobinfo->mp_str, buffer); packstr(jobinfo->ionode_str, buffer); packstr(jobinfo->blrtsimage, buffer); packstr(jobinfo->linuximage, buffer); packstr(jobinfo->mloaderimage, buffer); packstr(jobinfo->ramdiskimage, buffer); if (bg_conf) { pack16(bg_conf->mp_cnode_cnt, buffer); pack_bit_fmt(jobinfo->units_avail, buffer); pack_bit_fmt(jobinfo->units_used, buffer); } else { pack16(0, buffer); packnull(buffer); packnull(buffer); } } else { pack16(dims, buffer); /* pack space for 3 positions for geo * conn_type and start_loc and then, reboot, and rotate */ for (i=0; i<((dims*3)+2); i++) { pack16((uint16_t) 0, buffer); } pack32((uint32_t) 0, buffer); //block_cnode_cnt pack32((uint32_t) 0, buffer); //cnode_cnt packnull(buffer); //bg_block_id packnull(buffer); //nodes packnull(buffer); //ionodes packnull(buffer); //blrts packnull(buffer); //linux packnull(buffer); //mloader packnull(buffer); //ramdisk pack16((uint16_t) 0, buffer); //mp_cnode_cnt packnull(buffer); //units_avail packnull(buffer); //units_used } } else { error("pack_select_jobinfo: protocol_version " "%hu not supported", protocol_version); } return SLURM_SUCCESS; }
/* * pack_part - dump all configuration information about a specific partition * in machine independent form (for network transmission) * IN part_ptr - pointer to partition for which information is requested * IN/OUT buffer - buffer in which data is placed, pointers automatically * updated * global: default_part_loc - pointer to the default partition * NOTE: if you make any changes here be sure to make the corresponding changes * to _unpack_partition_info_members() in common/slurm_protocol_pack.c */ void pack_part(struct part_record *part_ptr, Buf buffer, uint16_t protocol_version) { uint32_t altered; if (protocol_version >= SLURM_2_3_PROTOCOL_VERSION) { if (default_part_loc == part_ptr) part_ptr->flags |= PART_FLAG_DEFAULT; else part_ptr->flags &= (~PART_FLAG_DEFAULT); packstr(part_ptr->name, buffer); pack32(part_ptr->grace_time, buffer); pack32(part_ptr->max_time, buffer); pack32(part_ptr->default_time, buffer); pack32(part_ptr->max_nodes_orig, buffer); pack32(part_ptr->min_nodes_orig, buffer); altered = part_ptr->total_nodes; select_g_alter_node_cnt(SELECT_APPLY_NODE_MAX_OFFSET, &altered); pack32(altered, buffer); pack32(part_ptr->total_cpus, buffer); pack32(part_ptr->def_mem_per_cpu, buffer); pack32(part_ptr->max_mem_per_cpu, buffer); pack16(part_ptr->flags, buffer); pack16(part_ptr->max_share, buffer); pack16(part_ptr->preempt_mode, buffer); pack16(part_ptr->priority, buffer); pack16(part_ptr->state_up, buffer); packstr(part_ptr->allow_groups, buffer); packstr(part_ptr->allow_alloc_nodes, buffer); packstr(part_ptr->alternate, buffer); packstr(part_ptr->nodes, buffer); pack_bit_fmt(part_ptr->node_bitmap, buffer); } else if (protocol_version >= SLURM_2_2_PROTOCOL_VERSION) { if (default_part_loc == part_ptr) part_ptr->flags |= PART_FLAG_DEFAULT; else part_ptr->flags &= (~PART_FLAG_DEFAULT); packstr(part_ptr->name, buffer); pack32(part_ptr->max_time, buffer); pack32(part_ptr->default_time, buffer); pack32(part_ptr->max_nodes_orig, buffer); pack32(part_ptr->min_nodes_orig, buffer); altered = part_ptr->total_nodes; select_g_alter_node_cnt(SELECT_APPLY_NODE_MAX_OFFSET, &altered); pack32(altered, buffer); pack32(part_ptr->total_cpus, buffer); pack16(part_ptr->flags, buffer); pack16(part_ptr->max_share, buffer); pack16(part_ptr->preempt_mode, buffer); pack16(part_ptr->priority, buffer); pack16(part_ptr->state_up, buffer); packstr(part_ptr->allow_groups, buffer); packstr(part_ptr->allow_alloc_nodes, buffer); packstr(part_ptr->alternate, buffer); packstr(part_ptr->nodes, buffer); pack_bit_fmt(part_ptr->node_bitmap, buffer); } else { uint16_t default_part_flag, hidden, no_root, root_only, state; if (default_part_loc == part_ptr) default_part_flag = 1; else default_part_flag = 0; if (part_ptr->flags & PART_FLAG_HIDDEN) hidden = 1; else hidden = 0; if (part_ptr->flags & PART_FLAG_NO_ROOT) no_root = 1; else no_root = 0; if (part_ptr->flags & PART_FLAG_ROOT_ONLY) root_only = 1; else root_only = 0; packstr(part_ptr->name, buffer); pack32(part_ptr->max_time, buffer); pack32(part_ptr->default_time, buffer); pack32(part_ptr->max_nodes_orig, buffer); pack32(part_ptr->min_nodes_orig, buffer); altered = part_ptr->total_nodes; select_g_alter_node_cnt(SELECT_APPLY_NODE_MAX_OFFSET, &altered); pack32(altered, buffer); pack32(part_ptr->total_cpus, buffer); pack16(default_part_flag, buffer); pack16(no_root, buffer); pack16(hidden, buffer); pack16(root_only, buffer); pack16(part_ptr->max_share, buffer); pack16(part_ptr->priority, buffer); if (part_ptr->state_up == PARTITION_UP) state = 1; else /* DOWN, DRAIN, and INACTIVE */ state = 0; pack16(state, buffer); packstr(part_ptr->allow_groups, buffer); packstr(part_ptr->allow_alloc_nodes, buffer); packstr(part_ptr->nodes, buffer); pack_bit_fmt(part_ptr->node_bitmap, buffer); } }