|  | /*****************************************************************************\ | 
|  | * src/slurmd/common/slurmstepd_init.c - slurmstepd initialization code | 
|  | ***************************************************************************** | 
|  | *  Copyright (C) 2005 The Regents of the University of California. | 
|  | *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). | 
|  | *  Written by Danny Auble <da@llnl.gov> | 
|  | *  CODE-OCEC-09-009. All rights reserved. | 
|  | * | 
|  | *  This file is part of Slurm, a resource management program. | 
|  | *  For details, see <https://slurm.schedmd.com/>. | 
|  | *  Please also read the included file: DISCLAIMER. | 
|  | * | 
|  | *  Slurm is free software; you can redistribute it and/or modify it under | 
|  | *  the terms of the GNU General Public License as published by the Free | 
|  | *  Software Foundation; either version 2 of the License, or (at your option) | 
|  | *  any later version. | 
|  | * | 
|  | *  In addition, as a special exception, the copyright holders give permission | 
|  | *  to link the code of portions of this program with the OpenSSL library under | 
|  | *  certain conditions as described in each individual source file, and | 
|  | *  distribute linked combinations including the two. You must obey the GNU | 
|  | *  General Public License in all respects for all of the code used other than | 
|  | *  OpenSSL. If you modify file(s) with this exception, you may extend this | 
|  | *  exception to your version of the file(s), but you are not obligated to do | 
|  | *  so. If you do not wish to do so, delete this exception statement from your | 
|  | *  version.  If you delete this exception statement from all source files in | 
|  | *  the program, then also delete it here. | 
|  | * | 
|  | *  Slurm is distributed in the hope that it will be useful, but WITHOUT ANY | 
|  | *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 
|  | *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | 
|  | *  details. | 
|  | * | 
|  | *  You should have received a copy of the GNU General Public License along | 
|  | *  with Slurm; if not, write to the Free Software Foundation, Inc., | 
|  | *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA. | 
|  | \*****************************************************************************/ | 
|  |  | 
|  | #include "src/slurmd/common/slurmstepd_init.h" | 
|  | #include "src/common/read_config.h" | 
|  | #include "src/common/xmalloc.h" | 
|  | #include "src/common/xstring.h" | 
|  |  | 
|  | /* Assume that the slurmd and slurmstepd are the same version level when slurmd | 
|  | * starts slurmstepd, so we do not need to support different protocol versions | 
|  | * for the different message formats. */ | 
|  | extern void pack_slurmd_conf_lite(slurmd_conf_t *conf, buf_t *buffer) | 
|  | { | 
|  | xassert(conf != NULL); | 
|  | pack16(SLURM_PROTOCOL_VERSION, buffer); | 
|  |  | 
|  | packstr(conf->hostname, buffer); | 
|  | pack16(conf->cpus, buffer); | 
|  | pack16(conf->boards, buffer); | 
|  | pack16(conf->sockets, buffer); | 
|  | pack16(conf->cores, buffer); | 
|  | pack16(conf->threads, buffer); | 
|  | pack16(conf->actual_threads, buffer); | 
|  | packstr(conf->cpu_spec_list, buffer); | 
|  | pack16(conf->core_spec_cnt, buffer); | 
|  | pack64(conf->mem_spec_limit, buffer); | 
|  | pack64(conf->conf_memory_size, buffer); | 
|  | pack16(conf->block_map_size, buffer); | 
|  | pack16_array(conf->block_map, conf->block_map_size, buffer); | 
|  | pack16_array(conf->block_map_inv, conf->block_map_size, buffer); | 
|  | packstr(conf->conffile, buffer); | 
|  | packstr(conf->spooldir, buffer); | 
|  | packstr(conf->node_name, buffer); | 
|  | packstr(conf->logfile, buffer); | 
|  | pack32(conf->debug_level, buffer); | 
|  | pack32(conf->syslog_debug, buffer); | 
|  | packstr(conf->stepd_loc, buffer); | 
|  | packbool(conf->daemonize, buffer); | 
|  | packstr(conf->node_topo_addr, buffer); | 
|  | packstr(conf->node_topo_pattern, buffer); | 
|  | pack16(conf->port, buffer); | 
|  | } | 
|  |  | 
|  | extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, buf_t *buffer) | 
|  | { | 
|  | uint32_t uint32_tmp; | 
|  | uint16_t protocol_version; | 
|  |  | 
|  | safe_unpack16(&protocol_version, buffer); | 
|  |  | 
|  | /* | 
|  | * No cross-version support is required here. slurmd and slurmstepd | 
|  | * must always be on the same release. | 
|  | */ | 
|  | if (protocol_version >= SLURM_PROTOCOL_VERSION) { | 
|  | safe_unpackstr(&conf->hostname, buffer); | 
|  | safe_unpack16(&conf->cpus, buffer); | 
|  | safe_unpack16(&conf->boards, buffer); | 
|  | safe_unpack16(&conf->sockets, buffer); | 
|  | safe_unpack16(&conf->cores, buffer); | 
|  | safe_unpack16(&conf->threads, buffer); | 
|  | safe_unpack16(&conf->actual_threads, buffer); | 
|  | safe_unpackstr(&conf->cpu_spec_list, buffer); | 
|  | safe_unpack16(&conf->core_spec_cnt, buffer); | 
|  | safe_unpack64(&conf->mem_spec_limit, buffer); | 
|  | safe_unpack64(&conf->conf_memory_size, buffer); | 
|  | safe_unpack16(&conf->block_map_size, buffer); | 
|  | safe_unpack16_array(&conf->block_map, &uint32_tmp, buffer); | 
|  | safe_unpack16_array(&conf->block_map_inv,  &uint32_tmp, buffer); | 
|  | safe_unpackstr(&conf->conffile, buffer); | 
|  | safe_unpackstr(&conf->spooldir, buffer); | 
|  | safe_unpackstr(&conf->node_name, buffer); | 
|  | safe_unpackstr(&conf->logfile, buffer); | 
|  | safe_unpack32(&conf->debug_level, buffer); | 
|  | safe_unpack32(&conf->syslog_debug, buffer); | 
|  | safe_unpackstr(&conf->stepd_loc, buffer); | 
|  | safe_unpackbool(&conf->daemonize, buffer); | 
|  | safe_unpackstr(&conf->node_topo_addr, buffer); | 
|  | safe_unpackstr(&conf->node_topo_pattern, buffer); | 
|  | safe_unpack16(&conf->port, buffer); | 
|  | } | 
|  |  | 
|  | return SLURM_SUCCESS; | 
|  |  | 
|  | unpack_error: | 
|  | error("unpack_error in unpack_slurmd_conf_lite_no_alloc: %m"); | 
|  | xfree(conf->hostname); | 
|  | xfree(conf->cpu_spec_list); | 
|  | xfree(conf->conffile); | 
|  | xfree(conf->spooldir); | 
|  | xfree(conf->node_name); | 
|  | xfree(conf->logfile); | 
|  | xfree(conf->node_topo_addr); | 
|  | xfree(conf->node_topo_pattern); | 
|  | return SLURM_ERROR; | 
|  | } | 
|  |  | 
|  | /* | 
|  | * Assume that the slurmd and slurmstepd are the same version level when slurmd | 
|  | * starts slurmstepd, so we do not need to support different protocol versions | 
|  | * for the different message formats. | 
|  | */ | 
|  | extern void pack_slurm_conf_lite(buf_t *buffer) | 
|  | { | 
|  | /* last_update */ | 
|  | /* accounting_storage_tres */ | 
|  | pack16(slurm_conf.accounting_storage_enforce, buffer); | 
|  | /* accounting_storage_backup_host */ | 
|  | /* accounting_storage_ext_host */ | 
|  | /* accounting_storage_host */ | 
|  | packstr(slurm_conf.accounting_storage_params, buffer); | 
|  | /* accounting_storage_pass */ | 
|  | /* accounting_storage_port */ | 
|  | packstr(slurm_conf.accounting_storage_type, buffer); | 
|  | /* acct_gather_conf */ | 
|  | packstr(slurm_conf.acct_gather_energy_type, buffer); | 
|  | packstr(slurm_conf.acct_gather_profile_type, buffer); | 
|  | packstr(slurm_conf.acct_gather_interconnect_type, buffer); | 
|  | packstr(slurm_conf.acct_gather_filesystem_type, buffer); | 
|  | pack16(slurm_conf.acct_gather_node_freq, buffer); | 
|  | packstr(slurm_conf.authalttypes, buffer); | 
|  | packstr(slurm_conf.authinfo, buffer); | 
|  | packstr(slurm_conf.authalt_params, buffer); | 
|  | packstr(slurm_conf.authtype, buffer); | 
|  | /* batch_start_timeout */ | 
|  | /* bb_type */ | 
|  | /* bcast_exclude */ | 
|  | /* bcast_parameters */ | 
|  | /* boot_time */ | 
|  | /* cgroup_conf */ | 
|  | /* cli_filter_plugins */ | 
|  | packstr(slurm_conf.cluster_name, buffer); | 
|  | packstr(slurm_conf.comm_params, buffer); | 
|  | /* complete_wait */ | 
|  | pack32(slurm_conf.conf_flags, buffer); | 
|  | packstr_array(slurm_conf.control_addr, slurm_conf.control_cnt, buffer); | 
|  | /* control_cnt */ | 
|  | /* *control_machine */ | 
|  | pack32(slurm_conf.cpu_freq_def, buffer); | 
|  | pack32(slurm_conf.cpu_freq_govs, buffer); | 
|  | packstr(slurm_conf.cred_type, buffer); | 
|  | pack64(slurm_conf.debug_flags, buffer); | 
|  | /* def_mem_per_cpu */ | 
|  | /* dependency_params */ | 
|  | /* eio_timeout */ | 
|  | /* enforce_part_limits */ | 
|  | packstr_array(slurm_conf.epilog, slurm_conf.epilog_cnt, buffer); | 
|  | /* epilog_msg_time */ | 
|  | /* epilog_slurmctld */ | 
|  | /* epilog_timeout */ | 
|  | /* fed_params */ | 
|  | /* first_job_id */ | 
|  | /* fs_dampening_factor */ | 
|  | /* get_env_timeout */ | 
|  | packstr(slurm_conf.gres_plugins, buffer); | 
|  | /* group_time */ | 
|  | /* group_force */ | 
|  | packstr(slurm_conf.gpu_freq_def, buffer); | 
|  | packstr(slurm_conf.hash_plugin, buffer); | 
|  | /* hash_val */ | 
|  | /* health_check_interval */ | 
|  | /* health_check_node_state */ | 
|  | /* health_check_program */ | 
|  | /* http_parser_type */ | 
|  | /* inactive_limit */ | 
|  | /* interactive_step_opts */ | 
|  | packstr(slurm_conf.job_acct_gather_freq, buffer); | 
|  | packstr(slurm_conf.job_acct_gather_type, buffer); | 
|  | packstr(slurm_conf.job_acct_gather_params, buffer); | 
|  | pack16(slurm_conf.job_acct_oom_kill, buffer); | 
|  | /* job_comp_host */ | 
|  | /* job_comp_loc */ | 
|  | /* job_comp_params */ | 
|  | /* job_comp_pass */ | 
|  | /* job_comp_port */ | 
|  | /* job_comp_type */ | 
|  | /* job_comp_user */ | 
|  | packstr(slurm_conf.job_container_plugin, buffer); | 
|  | /* job_defaults_list */ | 
|  | pack16(slurm_conf.job_file_append, buffer); | 
|  | /* job_requeue */ | 
|  | /* job_submit_plugins */ | 
|  | pack32(slurm_conf.keepalive_interval, buffer); | 
|  | pack32(slurm_conf.keepalive_probes, buffer); | 
|  | pack32(slurm_conf.keepalive_time, buffer); | 
|  | /* kill_on_bad_exit */ | 
|  | pack16(slurm_conf.kill_wait, buffer); | 
|  | packstr(slurm_conf.launch_params, buffer); | 
|  | /* licenses */ | 
|  | pack16(slurm_conf.log_fmt, buffer); | 
|  | /* mail_domain */ | 
|  | /* mail_prog */ | 
|  | /* max_array_sz */ | 
|  | /* max_batch_requeue */ | 
|  | /* max_dbd_msgs */ | 
|  | /* max_job_cnt */ | 
|  | /* max_job_id */ | 
|  | /* max_mem_per_cpu */ | 
|  | /* max_node_cnt */ | 
|  | pack32(slurm_conf.max_step_cnt, buffer); | 
|  | pack16(slurm_conf.max_tasks_per_node, buffer); | 
|  | /* mcs_plugin */ | 
|  | /* mcs_plugin_params */ | 
|  | /* min_job_age */ | 
|  | /* mpi_conf */ | 
|  | packstr(slurm_conf.mpi_default, buffer); | 
|  | /* mpi_params */ | 
|  | pack16(slurm_conf.msg_timeout, buffer); | 
|  | /* next_job_id */ | 
|  | /* node_features_conf */ | 
|  | /* node_features_plugins */ | 
|  | /* over_time_limit */ | 
|  | packstr(slurm_conf.plugindir, buffer); | 
|  | packstr(slurm_conf.plugstack, buffer); | 
|  | /* preempt_exempt_time */ | 
|  | /* preempt_mode */ | 
|  | packstr(slurm_conf.preempt_params, buffer); | 
|  | /* preempt_type */ | 
|  | packstr(slurm_conf.prep_params, buffer); | 
|  | packstr(slurm_conf.prep_plugins, buffer); | 
|  | /* priority_decay_hl */ | 
|  | /* priority_calc_period */ | 
|  | /* priority_favor_small */ | 
|  | /* priority_flags */ | 
|  | /* priority_max_age */ | 
|  | /* priority_params */ | 
|  | /* priority_reset_period */ | 
|  | /* priority_type */ | 
|  | /* priority_weight_age */ | 
|  | /* priority_weight_assoc */ | 
|  | /* priority_weight_fs */ | 
|  | /* priority_weight_js */ | 
|  | /* priority_weight_part */ | 
|  | /* priority_weight_qos */ | 
|  | /* priority_weight_tres */ | 
|  | /* private_data */ | 
|  | packstr(slurm_conf.proctrack_type, buffer); | 
|  | packstr_array(slurm_conf.prolog, slurm_conf.prolog_cnt, buffer); | 
|  | pack16(slurm_conf.prolog_flags, buffer); | 
|  | /* prolog_slurmctld */ | 
|  | /* prolog_timeout */ | 
|  | pack16(slurm_conf.propagate_prio_process, buffer); | 
|  | packstr(slurm_conf.propagate_rlimits, buffer); | 
|  | packstr(slurm_conf.propagate_rlimits_except, buffer); | 
|  | /* reboot_program */ | 
|  | /* reconfig_flags */ | 
|  | /* requeue_exit */ | 
|  | /* requeue_exit_hold */ | 
|  | /* resume_fail_program */ | 
|  | /* resume_program */ | 
|  | /* resume_rate */ | 
|  | /* resume_timeout */ | 
|  | /* resv_epilog */ | 
|  | /* resv_over_run */ | 
|  | /* resv_prolog */ | 
|  | /* ret2service */ | 
|  | /* sched_logfile */ | 
|  | /* sched_log_level */ | 
|  | /* sched_params */ | 
|  | /* sched_time_slice */ | 
|  | /* schedtype */ | 
|  | /* scron_params */ | 
|  | packstr(slurm_conf.select_type, buffer); | 
|  | /* select_conf_key_pairs */ | 
|  | pack16(slurm_conf.select_type_param, buffer); | 
|  | /* site_factor_plugin */ | 
|  | /* site_factor_params */ | 
|  | /* slurm_conf */ | 
|  | pack32(slurm_conf.slurm_user_id, buffer); | 
|  | /* slurm_user_name */ | 
|  | pack32(slurm_conf.slurmd_user_id, buffer); | 
|  | /* slurmd_user_name */ | 
|  | packstr(slurm_conf.slurmctld_addr, buffer); | 
|  | /* slurmctld_debug */ | 
|  | /* slurmctld_logfile */ | 
|  | /* slurmctld_pidfile */ | 
|  | /* slurmctld_plugstack */ | 
|  | /* slurmctld_plugstack_conf */ | 
|  | pack32(slurm_conf.slurmctld_port, buffer); | 
|  | pack16(slurm_conf.slurmctld_port_count, buffer); | 
|  | /* slurmctld_primary_off_prog */ | 
|  | /* slurmctld_primary_on_prog */ | 
|  | /* slurmctld_syslog_debug */ | 
|  | pack16(slurm_conf.slurmctld_timeout, buffer); | 
|  | /* slurmctld_params */ | 
|  | /* slurmd_debug */ | 
|  | /* slurmd_logfile */ | 
|  | /* slurmd_params */ | 
|  | /* slurmd_pidfile */ | 
|  | /* slurmd_port */ | 
|  | packstr(slurm_conf.slurmd_spooldir, buffer); | 
|  | /* slurmd_syslog_debug */ | 
|  | /* slurmd_timeout */ | 
|  | /* srun_epilog */ | 
|  | if (slurm_conf.srun_port_range) { | 
|  | pack16(slurm_conf.srun_port_range[0], buffer); | 
|  | pack16(slurm_conf.srun_port_range[1], buffer); | 
|  | } else { | 
|  | pack16(0, buffer); | 
|  | pack16(0, buffer); | 
|  | } | 
|  | /* srun_prolog */ | 
|  | /* state_save_location */ | 
|  | /* suspend_exc_nodes */ | 
|  | /* suspend_exc_parts */ | 
|  | /* suspend_program */ | 
|  | /* suspend_rate */ | 
|  | /* suspend_time */ | 
|  | /* suspend_timeout */ | 
|  | packstr(slurm_conf.switch_type, buffer); | 
|  | packstr(slurm_conf.switch_param, buffer); | 
|  | packstr(slurm_conf.task_epilog, buffer); | 
|  | packstr(slurm_conf.task_plugin, buffer); | 
|  | pack32(slurm_conf.task_plugin_param, buffer); | 
|  | packstr(slurm_conf.task_prolog, buffer); | 
|  | pack16(slurm_conf.tcp_timeout, buffer); | 
|  | packstr(slurm_conf.tls_type, buffer); | 
|  | packstr(slurm_conf.tmp_fs, buffer); | 
|  | packstr(slurm_conf.topology_param, buffer); | 
|  | packstr(slurm_conf.topology_plugin, buffer); | 
|  | pack16(slurm_conf.tree_width, buffer); | 
|  | packstr(slurm_conf.unkillable_program, buffer); | 
|  | pack16(slurm_conf.unkillable_timeout, buffer); | 
|  | /* url_parser_type */ | 
|  | /* version */ | 
|  | pack16(slurm_conf.vsize_factor, buffer); | 
|  | pack16(slurm_conf.wait_time, buffer); | 
|  | packstr(slurm_conf.x11_params, buffer); | 
|  | } | 
|  |  | 
|  | extern int unpack_slurm_conf_lite_no_alloc(buf_t *buffer) | 
|  | { | 
|  | uint16_t srun_port_min = 0, srun_port_max = 0; | 
|  |  | 
|  | init_slurm_conf(&slurm_conf); | 
|  | /* last_update */ | 
|  | /* accounting_storage_tres */ | 
|  | safe_unpack16(&slurm_conf.accounting_storage_enforce, buffer); | 
|  | /* accounting_storage_backup_host */ | 
|  | /* accounting_storage_ext_host */ | 
|  | /* accounting_storage_host */ | 
|  | safe_unpackstr(&slurm_conf.accounting_storage_params, buffer); | 
|  | /* accounting_storage_pass */ | 
|  | /* accounting_storage_port */ | 
|  | safe_unpackstr(&slurm_conf.accounting_storage_type, buffer); | 
|  | /* acct_gather_conf */ | 
|  | safe_unpackstr(&slurm_conf.acct_gather_energy_type, buffer); | 
|  | safe_unpackstr(&slurm_conf.acct_gather_profile_type, buffer); | 
|  | safe_unpackstr(&slurm_conf.acct_gather_interconnect_type, buffer); | 
|  | safe_unpackstr(&slurm_conf.acct_gather_filesystem_type, buffer); | 
|  | safe_unpack16(&slurm_conf.acct_gather_node_freq, buffer); | 
|  | safe_unpackstr(&slurm_conf.authalttypes, buffer); | 
|  | safe_unpackstr(&slurm_conf.authinfo, buffer); | 
|  | safe_unpackstr(&slurm_conf.authalt_params, buffer); | 
|  | safe_unpackstr(&slurm_conf.authtype, buffer); | 
|  | /* batch_start_timeout */ | 
|  | /* bb_type */ | 
|  | /* bcast_exclude */ | 
|  | /* bcast_parameters */ | 
|  | /* boot_time */ | 
|  | /* cgroup_conf */ | 
|  | /* cli_filter_plugins */ | 
|  | safe_unpackstr(&slurm_conf.cluster_name, buffer); | 
|  | safe_unpackstr(&slurm_conf.comm_params, buffer); | 
|  | /* complete_wait */ | 
|  | safe_unpack32(&slurm_conf.conf_flags, buffer); | 
|  | safe_unpackstr_array(&slurm_conf.control_addr, | 
|  | &slurm_conf.control_cnt, buffer); | 
|  | /* *control_addr */ | 
|  | /* control_cnt */ | 
|  | /* *control_machine */ | 
|  | safe_unpack32(&slurm_conf.cpu_freq_def, buffer); | 
|  | safe_unpack32(&slurm_conf.cpu_freq_govs, buffer); | 
|  | safe_unpackstr(&slurm_conf.cred_type, buffer); | 
|  | safe_unpack64(&slurm_conf.debug_flags, buffer); | 
|  | /* def_mem_per_cpu */ | 
|  | /* dependency_params */ | 
|  | /* eio_timeout */ | 
|  | /* enforce_part_limits */ | 
|  | safe_unpackstr_array(&slurm_conf.epilog, &slurm_conf.epilog_cnt, | 
|  | buffer); | 
|  | /* epilog_msg_time */ | 
|  | /* epilog_slurmctld */ | 
|  | /* epilog_timeout */ | 
|  | /* fed_params */ | 
|  | /* first_job_id */ | 
|  | /* fs_dampening_factor */ | 
|  | /* get_env_timeout */ | 
|  | safe_unpackstr(&slurm_conf.gres_plugins, buffer); | 
|  | /* group_time */ | 
|  | /* group_force */ | 
|  | safe_unpackstr(&slurm_conf.gpu_freq_def, buffer); | 
|  | safe_unpackstr(&slurm_conf.hash_plugin, buffer); | 
|  | /* hash_val */ | 
|  | /* health_check_interval */ | 
|  | /* health_check_node_state */ | 
|  | /* health_check_program */ | 
|  | /* inactive_limit */ | 
|  | /* interactive_step_opts */ | 
|  | safe_unpackstr(&slurm_conf.job_acct_gather_freq, buffer); | 
|  | safe_unpackstr(&slurm_conf.job_acct_gather_type, buffer); | 
|  | safe_unpackstr(&slurm_conf.job_acct_gather_params, buffer); | 
|  | safe_unpack16(&slurm_conf.job_acct_oom_kill, buffer); | 
|  | /* job_comp_host */ | 
|  | /* job_comp_loc */ | 
|  | /* job_comp_params */ | 
|  | /* job_comp_pass */ | 
|  | /* job_comp_port */ | 
|  | /* job_comp_type */ | 
|  | /* job_comp_user */ | 
|  | safe_unpackstr(&slurm_conf.job_container_plugin, buffer); | 
|  | /* job_defaults_list */ | 
|  | safe_unpack16(&slurm_conf.job_file_append, buffer); | 
|  | /* job_requeue */ | 
|  | /* job_submit_plugins */ | 
|  | safe_unpack32(&slurm_conf.keepalive_interval, buffer); | 
|  | safe_unpack32(&slurm_conf.keepalive_probes, buffer); | 
|  | safe_unpack32(&slurm_conf.keepalive_time, buffer); | 
|  | /* kill_on_bad_exit */ | 
|  | safe_unpack16(&slurm_conf.kill_wait, buffer); | 
|  | safe_unpackstr(&slurm_conf.launch_params, buffer); | 
|  | /* licenses */ | 
|  | safe_unpack16(&slurm_conf.log_fmt, buffer); | 
|  | /* mail_domain */ | 
|  | /* mail_prog */ | 
|  | /* max_array_sz */ | 
|  | /* max_batch_requeue */ | 
|  | /* max_dbd_msgs */ | 
|  | /* max_job_cnt */ | 
|  | /* max_job_id */ | 
|  | /* max_mem_per_cpu */ | 
|  | /* max_node_cnt */ | 
|  | safe_unpack32(&slurm_conf.max_step_cnt, buffer); | 
|  | safe_unpack16(&slurm_conf.max_tasks_per_node, buffer); | 
|  | /* mcs_plugin */ | 
|  | /* mcs_plugin_params */ | 
|  | /* min_job_age */ | 
|  | /* mpi_conf */ | 
|  | safe_unpackstr(&slurm_conf.mpi_default, buffer); | 
|  | /* mpi_params */ | 
|  | safe_unpack16(&slurm_conf.msg_timeout, buffer); | 
|  | /* next_job_id */ | 
|  | /* node_features_conf */ | 
|  | /* node_features_plugins */ | 
|  | /* over_time_limit */ | 
|  | safe_unpackstr(&slurm_conf.plugindir, buffer); | 
|  | safe_unpackstr(&slurm_conf.plugstack, buffer); | 
|  | /* preempt_exempt_time */ | 
|  | /* preempt_mode */ | 
|  | safe_unpackstr(&slurm_conf.preempt_params, buffer); | 
|  | /* preempt_type */ | 
|  | safe_unpackstr(&slurm_conf.prep_params, buffer); | 
|  | safe_unpackstr(&slurm_conf.prep_plugins, buffer); | 
|  | /* priority_decay_hl */ | 
|  | /* priority_calc_period */ | 
|  | /* priority_favor_small */ | 
|  | /* priority_flags */ | 
|  | /* priority_max_age */ | 
|  | /* priority_params */ | 
|  | /* priority_reset_period */ | 
|  | /* priority_type */ | 
|  | /* priority_weight_age */ | 
|  | /* priority_weight_assoc */ | 
|  | /* priority_weight_fs */ | 
|  | /* priority_weight_js */ | 
|  | /* priority_weight_part */ | 
|  | /* priority_weight_qos */ | 
|  | /* priority_weight_tres */ | 
|  | /* private_data */ | 
|  | safe_unpackstr(&slurm_conf.proctrack_type, buffer); | 
|  | safe_unpackstr_array(&slurm_conf.prolog, &slurm_conf.prolog_cnt, | 
|  | buffer); | 
|  | safe_unpack16(&slurm_conf.prolog_flags, buffer); | 
|  | /* prolog_slurmctld */ | 
|  | /* prolog_timeout */ | 
|  | safe_unpack16(&slurm_conf.propagate_prio_process, buffer); | 
|  | safe_unpackstr(&slurm_conf.propagate_rlimits, buffer); | 
|  | safe_unpackstr(&slurm_conf.propagate_rlimits_except, buffer); | 
|  | /* reboot_program */ | 
|  | /* reconfig_flags */ | 
|  | /* requeue_exit */ | 
|  | /* requeue_exit_hold */ | 
|  | /* resume_fail_program */ | 
|  | /* resume_program */ | 
|  | /* resume_rate */ | 
|  | /* resume_timeout */ | 
|  | /* resv_epilog */ | 
|  | /* resv_over_run */ | 
|  | /* resv_prolog */ | 
|  | /* ret2service */ | 
|  | /* sched_logfile */ | 
|  | /* sched_log_level */ | 
|  | /* sched_params */ | 
|  | /* sched_time_slice */ | 
|  | /* schedtype */ | 
|  | /* scron_params */ | 
|  | safe_unpackstr(&slurm_conf.select_type, buffer); | 
|  | /* select_conf_key_pairs */ | 
|  | safe_unpack16(&slurm_conf.select_type_param, buffer); | 
|  | /* site_factor_plugin */ | 
|  | /* site_factor_params */ | 
|  | /* &slurm_conf */ | 
|  | safe_unpack32(&slurm_conf.slurm_user_id, buffer); | 
|  | /* slurm_user_name */ | 
|  | safe_unpack32(&slurm_conf.slurmd_user_id, buffer); | 
|  | /* slurmd_user_name */ | 
|  | safe_unpackstr(&slurm_conf.slurmctld_addr, buffer); | 
|  | /* slurmctld_debug */ | 
|  | /* slurmctld_logfile */ | 
|  | /* slurmctld_pidfile */ | 
|  | /* slurmctld_plugstack */ | 
|  | /* slurmctld_plugstack_conf */ | 
|  | safe_unpack32(&slurm_conf.slurmctld_port, buffer); | 
|  | safe_unpack16(&slurm_conf.slurmctld_port_count, buffer); | 
|  | /* slurmctld_primary_off_prog */ | 
|  | /* slurmctld_primary_on_prog */ | 
|  | /* slurmctld_syslog_debug */ | 
|  | safe_unpack16(&slurm_conf.slurmctld_timeout, buffer); | 
|  | /* slurmctld_params */ | 
|  | /* slurmd_debug */ | 
|  | /* slurmd_logfile */ | 
|  | /* slurmd_params */ | 
|  | /* slurmd_pidfile */ | 
|  | /* slurmd_port */ | 
|  | safe_unpackstr(&slurm_conf.slurmd_spooldir, buffer); | 
|  | /* slurmd_syslog_debug */ | 
|  | /* slurmd_timeout */ | 
|  | /* srun_epilog */ | 
|  | safe_unpack16(&srun_port_min, buffer); | 
|  | safe_unpack16(&srun_port_max, buffer); | 
|  | if (srun_port_max) { | 
|  | slurm_conf.srun_port_range = xcalloc(2, sizeof(uint16_t)); | 
|  | slurm_conf.srun_port_range[0] = srun_port_min; | 
|  | slurm_conf.srun_port_range[1] = srun_port_max; | 
|  | } | 
|  | /* srun_prolog */ | 
|  | /* state_save_location */ | 
|  | /* suspend_exc_nodes */ | 
|  | /* suspend_exc_parts */ | 
|  | /* suspend_program */ | 
|  | /* suspend_rate */ | 
|  | /* suspend_time */ | 
|  | /* suspend_timeout */ | 
|  | safe_unpackstr(&slurm_conf.switch_type, buffer); | 
|  | safe_unpackstr(&slurm_conf.switch_param, buffer); | 
|  | safe_unpackstr(&slurm_conf.task_epilog, buffer); | 
|  | safe_unpackstr(&slurm_conf.task_plugin, buffer); | 
|  | safe_unpack32(&slurm_conf.task_plugin_param, buffer); | 
|  | safe_unpackstr(&slurm_conf.task_prolog, buffer); | 
|  | safe_unpack16(&slurm_conf.tcp_timeout, buffer); | 
|  | safe_unpackstr(&slurm_conf.tls_type, buffer); | 
|  | safe_unpackstr(&slurm_conf.tmp_fs, buffer); | 
|  | safe_unpackstr(&slurm_conf.topology_param, buffer); | 
|  | safe_unpackstr(&slurm_conf.topology_plugin, buffer); | 
|  | safe_unpack16(&slurm_conf.tree_width, buffer); | 
|  | safe_unpackstr(&slurm_conf.unkillable_program, buffer); | 
|  | safe_unpack16(&slurm_conf.unkillable_timeout, buffer); | 
|  | /* version */ | 
|  | safe_unpack16(&slurm_conf.vsize_factor, buffer); | 
|  | safe_unpack16(&slurm_conf.wait_time, buffer); | 
|  | safe_unpackstr(&slurm_conf.x11_params, buffer); | 
|  |  | 
|  | return SLURM_SUCCESS; | 
|  | unpack_error: | 
|  | error("unpack_error in %s: %m", __func__); | 
|  |  | 
|  | free_slurm_conf(&slurm_conf, false); | 
|  |  | 
|  | return SLURM_ERROR; | 
|  | } | 
|  |  | 
|  | extern void pack_stepd_reconf(buf_t *buffer, uint16_t protocol_version) | 
|  | { | 
|  | /* | 
|  | * Unlike the initialization functions above, this does need to be | 
|  | * able to communicate with an older slurmstepd if the slurmd process | 
|  | * has been upgraded. | 
|  | */ | 
|  | if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) { | 
|  | packstr_array(slurm_conf.control_addr, slurm_conf.control_cnt, | 
|  | buffer); | 
|  | packstr(slurm_conf.slurmctld_addr, buffer); | 
|  | pack32(slurm_conf.slurmctld_port, buffer); | 
|  | pack16(slurm_conf.slurmctld_port_count, buffer); | 
|  | } | 
|  | } | 
|  |  | 
|  | /* | 
|  | * This does not need to be versioned - slurmd will always pack in our | 
|  | * native protocol version. Directly unpack into slurm_conf - the buffer | 
|  | * was already read in successfully off the socket and we trust slurmd | 
|  | * to have structured this correctly. | 
|  | */ | 
|  | extern void unpack_stepd_reconf(buf_t *buffer) | 
|  | { | 
|  | xfree(slurm_conf.control_addr); | 
|  | safe_unpackstr_array(&slurm_conf.control_addr, | 
|  | &slurm_conf.control_cnt, buffer); | 
|  | xfree(slurm_conf.slurmctld_addr); | 
|  | safe_unpackstr(&slurm_conf.slurmctld_addr, buffer); | 
|  |  | 
|  | safe_unpack32(&slurm_conf.slurmctld_port, buffer); | 
|  | safe_unpack16(&slurm_conf.slurmctld_port_count, buffer); | 
|  |  | 
|  | for (int i = 0; i < slurm_conf.control_cnt; i++) | 
|  | debug("%s: control_addr[%d]=%s", | 
|  | __func__, i, slurm_conf.control_addr[i]); | 
|  | debug("%s: slurmctld_port=%d, slurmctld_port_count=%d, slurmctld_addr=%s", | 
|  | __func__, slurm_conf.slurmctld_port, | 
|  | slurm_conf.slurmctld_port_count, slurm_conf.slurmctld_addr); | 
|  |  | 
|  | return; | 
|  |  | 
|  | unpack_error: | 
|  | error("%s: unpack_error: %m", __func__); | 
|  | } |