blob: 53fbfc7232e26fd4b817cffb5ec47a4231421a48 [file] [log] [blame]
/*****************************************************************************\
** pmi.h - PMI common definitions
*****************************************************************************
* Copyright (C) 2011-2012 National University of Defense Technology.
* Written by Hongjia Cao <hjcao@nudt.edu.cn>.
* 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.
\*****************************************************************************/
#ifndef _PMI_H
#define _PMI_H
/***********************************************************\
* PMI1 definitions
\***********************************************************/
/* from src/pmi/simple/simeple_pmiutil.h */
#define PMIU_MAXLINE 1024
/* from src/pm/hydra/pm/pmiserv/pmi_common.h */
#define MAXKEYLEN 64 /* max length of key in keyval space */
#define MAXVALLEN 1024 /* max length of value in keyval space */
#define MAXNAMELEN 256 /* max length of various names */
#define MAXKVSNAME MAXNAMELEN /* max length of a kvsname */
#define GETMAXES_CMD "get_maxes"
#define MAXES_CMD "maxes"
#define GETUNIVSIZE_CMD "get_universe_size"
#define UNIVSIZE_CMD "universe_size"
#define GETAPPNUM_CMD "get_appnum"
#define APPNUM_CMD "appnum"
#define BARRIERIN_CMD "barrier_in"
#define BARRIEROUT_CMD "barrier_out"
#define FINALIZE_CMD "finalize"
#define FINALIZEACK_CMD "finalize_ack"
#define ABORT_CMD "abort"
#define PUT_CMD "put"
#define PUTRESULT_CMD "put_result"
#define GET_CMD "get"
#define GETRESULT_CMD "get_result"
#define GETBYIDX_CMD "getbyidx"
#define GETBYIDXRESULTS_CMD "getbyidx_results"
#define SPAWNRESULT_CMD "spawn_result"
#define MCMD_KEY "mcmd"
#define ENDCMD_KEY "endcmd"
#define KVSNAMEMAX_KEY "kvsname_max"
#define KEYLENMAX_KEY "keylen_max"
#define VALLENMAX_KEY "vallen_max"
#define SIZE_KEY "size"
#define APPNUM_KEY "appnum"
#define EXECNAME_KEY "execname"
#define NPROCS_KEY "nprocs"
#define ARGCNT_KEY "argcnt"
#define INFONUM_KEY "info_num"
#define TOTSPAWNS_KEY "totspawns"
#define SPAWNSSOFAR_KEY "spawnssofar"
#define KVSNAME_KEY "kvsname"
#define PREPUTNUM_KEY "preput_num"
#define PREPUTKEY_KEY "preput_key_"
#define PREPUTVAL_KEY "preput_val_"
/***********************************************************\
* PMI2 definitions
\***********************************************************/
/* from src/include/pmi2.h of mpich2 */
#define PMI2_SUCCESS 0
#define PMI2_FAIL -1
#define PMI2_ERR_INIT 1
#define PMI2_ERR_NOMEM 2
#define PMI2_ERR_INVALID_ARG 3
#define PMI2_ERR_INVALID_KEY 4
#define PMI2_ERR_INVALID_KEY_LENGTH 5
#define PMI2_ERR_INVALID_VAL 6
#define PMI2_ERR_INVALID_VAL_LENGTH 7
#define PMI2_ERR_INVALID_LENGTH 8
#define PMI2_ERR_INVALID_NUM_ARGS 9
#define PMI2_ERR_INVALID_ARGS 10
#define PMI2_ERR_INVALID_NUM_PARSED 11
#define PMI2_ERR_INVALID_KEYVALP 12
#define PMI2_ERR_INVALID_SIZE 13
#define PMI2_ERR_OTHER 14
#define PMI2_MAX_KEYLEN 64
#define PMI2_MAX_VALLEN 1024
#define PMI2_MAX_ATTRVALUE 1024
#define PMI2_ID_NULL -1
/* modified from src/pmi/pmi2/simple2pmi.h of mpich2 */
#define FULLINIT_CMD "fullinit"
#define FULLINITRESP_CMD "fullinit-response"
#define FINALIZE_CMD "finalize"
#define FINALIZERESP_CMD "finalize-response"
#define ABORT_CMD "abort"
#define JOBGETID_CMD "job-getid"
#define JOBGETIDRESP_CMD "job-getid-response"
#define JOBCONNECT_CMD "job-connect"
#define JOBCONNECTRESP_CMD "job-connect-response"
#define JOBDISCONNECT_CMD "job-disconnect"
#define JOBDISCONNECTRESP_CMD "job-disconnect-response"
#define KVSPUT_CMD "kvs-put"
#define KVSPUTRESP_CMD "kvs-put-response"
#define KVSFENCE_CMD "kvs-fence"
#define KVSFENCERESP_CMD "kvs-fence-response"
#define KVSGET_CMD "kvs-get"
#define KVSGETRESP_CMD "kvs-get-response"
#define GETNODEATTR_CMD "info-getnodeattr"
#define GETNODEATTRRESP_CMD "info-getnodeattr-response"
#define PUTNODEATTR_CMD "info-putnodeattr"
#define PUTNODEATTRRESP_CMD "info-putnodeattr-response"
#define GETJOBATTR_CMD "info-getjobattr"
#define GETJOBATTRRESP_CMD "info-getjobattr-response"
#define NAMEPUBLISH_CMD "name-publish"
#define NAMEPUBLISHRESP_CMD "name-publish-response"
#define NAMEUNPUBLISH_CMD "name-unpublish"
#define NAMEUNPUBLISHRESP_CMD "name-unpublish-response"
#define NAMELOOKUP_CMD "name-lookup"
#define NAMELOOKUPRESP_CMD "name-lookup-response"
#define SPAWN_CMD "spawn"
#define SPAWNRESP_CMD "spawn-response"
#define RING_CMD "ring"
#define RINGRESP_CMD "ring-response"
#define GETMYKVSNAME_CMD "get_my_kvsname"
#define GETMYKVSNAMERESP_CMD "my_kvsname"
#define CREATEKVS_CMD "create_kvs"
#define DESTROYKVS_CMD "destroy_kvs"
#define PUBLISHNAME_CMD "publish_name"
#define UNPUBLISHNAME_CMD "unpublish_name"
#define LOOKUPNAME_CMD "lookup_name"
#define PUBLISHRESULT_CMD "publish_result"
#define UNPUBLISHRESULT_CMD "unpublish_result"
#define LOOKUPRESULT_CMD "lookup_result"
#define MCMD_CMD "mcmd"
#define CMD_KEY "cmd"
#define PMIJOBID_KEY "pmijobid"
#define PMIRANK_KEY "pmirank"
#define SRCID_KEY "srcid"
#define THREADED_KEY "threaded"
#define RC_KEY "rc"
#define ERRMSG_KEY "errmsg"
#define PMIVERSION_KEY "pmi-version"
#define PMISUBVER_KEY "pmi-subversion"
#define RANK_KEY "rank"
#define SIZE_KEY "size"
#define APPNUM_KEY "appnum"
#define SPAWNERJOBID_KEY "spawner-jobid"
#define DEBUGGED_KEY "debugged"
#define PMIVERBOSE_KEY "pmiverbose"
#define ISWORLD_KEY "isworld"
#define MSG_KEY "msg"
#define JOBID_KEY "jobid"
#define KVSCOPY_KEY "kvscopy"
#define KEY_KEY "key"
#define VALUE_KEY "value"
#define FOUND_KEY "found"
#define WAIT_KEY "wait"
#define NAME_KEY "name"
#define PORT_KEY "port"
#define THRID_KEY "thrid"
#define INFOKEYCOUNT_KEY "infokeycount"
#define INFOKEY_KEY "infokey"
#define INFOVAL_KEY "infoval"
#define FOUND_KEY "found"
#define NCMDS_KEY "ncmds"
#define PREPUTCOUNT_KEY "preputcount"
#define PPKEY_KEY "ppkey"
#define PPVAL_KEY "ppval"
#define SUBCMD_KEY "subcmd"
#define MAXPROCS_KEY "maxprocs"
#define ARGC_KEY "argc"
#define ARGV_KEY "argv"
#define INFOKEYCOUNT_KEY "infokeycount"
#define ERRCODES_KEY "errcodes"
#define SERVICE_KEY "service"
#define INFO_KEY "info"
#define RING_COUNT_KEY "ring-count"
#define RING_LEFT_KEY "ring-left"
#define RING_RIGHT_KEY "ring-right"
#define TRUE_VAL "TRUE"
#define FALSE_VAL "FALSE"
#define JOB_ATTR_PROC_MAP "PMI_process_mapping"
#define JOB_ATTR_UNIV_SIZE "universeSize"
#define JOB_ATTR_NETINFO "PMI_netinfo_of_task"
#define JOB_ATTR_RESV_PORTS "mpi_reserved_ports"
/***********************************************************\
* Environment variables
\***********************************************************/
#define PMI2_SRUN_PORT_ENV "SLURM_PMI2_SRUN_PORT"
#define PMI2_STEP_NODES_ENV "SLURM_PMI2_STEP_NODES"
#define PMI2_TREE_WIDTH_ENV "SLURM_PMI2_TREE_WIDTH"
#define PMI2_PROC_MAPPING_ENV "SLURM_PMI2_PROC_MAPPING"
#define PMI2_PMI_JOBID_ENV "SLURM_PMI2_PMI_JOBID"
#define PMI2_SPAWN_SEQ_ENV "SLURM_PMI2_SPAWN_SEQ"
#define PMI2_SPAWNER_JOBID_ENV "SLURM_PMI2_SPAWNER_JOBID"
#define PMI2_SPAWNER_PORT_ENV "SLURM_PMI2_SPAWNER_PORT"
#define PMI2_PREPUT_CNT_ENV "SLURM_PMI2_PREPUT_COUNT"
#define PMI2_PPKEY_ENV "SLURM_PMI2_PPKEY"
#define PMI2_PPVAL_ENV "SLURM_PMI2_PPVAL"
#define SLURM_STEP_RESV_PORTS "SLURM_STEP_RESV_PORTS"
#define PMIX_RING_TREE_WIDTH_ENV "SLURM_PMIX_RING_WIDTH"
/* old PMIv1 envs */
#define PMI2_PMI_DEBUGGED_ENV "PMI_DEBUG"
#define PMI2_KVS_NO_DUP_KEYS_ENV "SLURM_PMI_KVS_NO_DUP_KEYS"
extern int handle_pmi1_cmd(int fd, int lrank);
extern int handle_pmi2_cmd(int fd, int lrank);
#endif /* _PMI_H */