blob: 5b4a412123b259eb1c4c82c64058ad4f0a70bc0d [file] [log] [blame]
/*****************************************************************************\
* opt.h - definitions for srun option processing
*****************************************************************************
* Copyright (C) 2002-2007 The Regents of the University of California.
* Copyright (C) 2008-2010 Lawrence Livermore National Security.
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
* Written by Mark Grondona <grondona1@llnl.gov>,
* Christopher J. Morrone <morrone2@llnl.gov>, et. al.
* CODE-OCEC-09-009. All rights reserved.
*
* This file is part of SLURM, a resource management program.
* For details, see <http://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 _HAVE_OPT_H
#define _HAVE_OPT_H
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
#include "src/common/macros.h" /* true and false */
#include "src/common/env.h"
#include "src/common/slurmdb_defs.h"
#ifndef SYSTEM_DIMENSIONS
# define SYSTEM_DIMENSIONS 1
#endif
typedef struct sbatch_options {
List clusters; /* cluster to run this on. */
char *progname; /* argv[0] of this program or */
/* batch script argv and argc, if provided on the command line */
int script_argc;
char **script_argv;
char *user; /* local username */
uid_t uid; /* local uid */
gid_t gid; /* local gid */
uid_t euid; /* effective user --uid=user */
gid_t egid; /* effective group --gid=group */
char *cwd; /* current working directory */
int ntasks; /* --ntasks=n, -n n */
bool ntasks_set; /* true if ntasks explicitly set */
int cpus_per_task; /* --cpus-per-task=n, -c n */
bool cpus_set; /* true if cpus_per_task explicitly set */
int min_nodes; /* --nodes=n, -N n */
int max_nodes; /* --nodes=x-n, -N x-n */
bool nodes_set; /* true if nodes explicitly set */
int sockets_per_node; /* --sockets-per-node=n */
int cores_per_socket; /* --cores-per-socket=n */
int threads_per_core; /* --threads-per-core=n */
int ntasks_per_node; /* --ntasks-per-node=n */
int ntasks_per_socket; /* --ntasks-per-socket=n */
int ntasks_per_core; /* --ntasks-per-core=n */
cpu_bind_type_t cpu_bind_type; /* --cpu_bind= */
char *cpu_bind; /* binding map for map/mask_cpu */
mem_bind_type_t mem_bind_type; /* --mem_bind= */
char *mem_bind; /* binding map for map/mask_mem */
bool extra_set; /* true if extra node info explicitly set */
int time_limit; /* --time, -t (int minutes) */
char *time_limit_str; /* --time, -t (string) */
int time_min; /* --min-time (int minutes) */
char *time_min_str; /* --min-time (string) */
char *partition; /* --partition=n, -p n */
uint32_t profile; /* --profile=[all | none} */
enum task_dist_states
distribution; /* --distribution=, -m dist */
uint32_t plane_size; /* lllp distribution -> plane_size for
* when -m plane=<# of lllp per
* plane> */
char *job_name; /* --job-name=, -J name */
unsigned int jobid; /* --jobid=jobid */
bool jobid_set; /* true of jobid explicitly set */
char *mpi_type; /* --mpi=type */
char *dependency; /* --dependency, -P type:jobid */
int nice; /* --nice */
uint32_t priority; /* --priority */
char *account; /* --account, -U acct_name */
char *comment; /* --comment */
char *propagate; /* --propagate[=RLIMIT_CORE,...]*/
char *qos; /* --qos */
int immediate; /* -i, --immediate */
uint16_t warn_flags; /* --signal=flags:<int>@<time> */
uint16_t warn_signal; /* --signal=flags:<int>@<time> */
uint16_t warn_time; /* --signal=flags:<int>@<time> */
bool hold; /* --hold, -H */
bool parsable; /* --parsable */
bool no_kill; /* --no-kill, -k */
int requeue; /* --requeue and --no-requeue */
uint8_t open_mode; /* --open-mode */
char *acctg_freq; /* --acctg-freq=<type1>=<freq1>,*/
/* <type2>=<freq2>,... */
bool overcommit; /* --overcommit -O */
uint16_t shared; /* --share, -s */
char *licenses; /* --licenses, -L */
char *network; /* --network= */
int quiet;
int verbose;
uint16_t wait_all_nodes; /* --wait-nodes-ready=val */
char *wrap;
/* constraint options */
int mincpus; /* --mincpus=n */
int minsockets; /* --minsockets=n */
int mincores; /* --mincores=n */
int minthreads; /* --minthreads=n */
int mem_per_cpu; /* --mem-per-cpu=n */
int realmem; /* --mem=n */
long tmpdisk; /* --tmp=n */
char *constraints; /* --constraints=, -C constraint*/
char *gres; /* --gres */
bool contiguous; /* --contiguous */
char *nodelist; /* --nodelist=node1,node2,... */
char *exc_nodes; /* --exclude=node1,node2,... -x */
/* BLUEGENE SPECIFIC */
uint16_t geometry[HIGHEST_DIMENSIONS]; /* --geometry, -g */
bool reboot; /* --reboot */
bool no_rotate; /* --no_rotate, -R */
uint16_t conn_type[HIGHEST_DIMENSIONS]; /* --conn-type */
char *blrtsimage; /* --blrts-image BlrtsImage for block */
char *linuximage; /* --linux-image LinuxImage for block */
char *mloaderimage; /* --mloader-image mloaderImage for block */
char *ramdiskimage; /* --ramdisk-image RamDiskImage for block */
/*********************/
char *array_inx; /* -a, --array */
time_t begin; /* --begin */
uint16_t mail_type; /* --mail-type */
char *mail_user; /* --mail-user */
char *ifname; /* input file name */
char *ofname; /* output file name */
char *efname; /* error file name */
int get_user_env_time; /* --get-user-env[=timeout] */
int get_user_env_mode; /* --get-user-env=[S|L] */
char *export_env; /* --export */
char *export_file; /* --export-file=file */
char *wckey; /* --wckey workload characterization key */
char *reservation; /* --reservation */
int ckpt_interval; /* --checkpoint (int minutes) */
char *ckpt_interval_str;/* --checkpoint (string) */
char *ckpt_dir; /* --checkpoint-dir (string) */
int req_switch; /* Minimum number of switches */
int wait4switch; /* Maximum time to wait for minimum switches */
char **spank_job_env; /* SPANK controlled environment for job
* Prolog and Epilog */
int spank_job_env_size; /* size of spank_job_env */
int umask; /* job umask for PBS */
int core_spec; /* --core-spec=n, -S n */
bool test_only; /* --test-only */
} opt_t;
extern opt_t opt;
extern int error_exit;
extern int ignore_pbs;
/*
* process_options_first_pass()
*
* In this first pass we only look at the command line options, and we
* will only handle a few options (help, usage, quiet, verbose, version),
* and look for the script name and arguments (if provided).
*
* We will parse the environment variable options, batch script options,
* and all of the rest of the command line options in
* process_options_second_pass().
*
* Return a pointer to the batch script file name if provided on the command
* line, otherwise return NULL (in which case the script will need to be read
* from standard input).
*/
char *process_options_first_pass(int argc, char **argv);
/* process options:
* 1. update options with option set in the script
* 2. update options with env vars
* 3. update options with commandline args
* 4. perform some verification that options are reasonable
*/
int process_options_second_pass(int argc, char *argv[], const char *file,
const void *script_body, int script_size);
/* external functions available for SPANK plugins to modify the environment
* exported to the SLURM Prolog and Epilog programs */
extern char *spank_get_job_env(const char *name);
extern int spank_set_job_env(const char *name, const char *value,
int overwrite);
extern int spank_unset_job_env(const char *name);
#endif /* _HAVE_OPT_H */