|  | /*****************************************************************************\ | 
|  | *  proc_args.h - helper functions for command argument processing | 
|  | ***************************************************************************** | 
|  | *  Copyright (C) 2007 Hewlett-Packard Development Company, L.P. | 
|  | *  Written by Christopher Holmes <cholmes@hp.com>, who borrowed heavily | 
|  | *  from existing Slurm source code, particularly src/srun/opt.c | 
|  | * | 
|  | *  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 _PROC_ARGS_H | 
|  | #define _PROC_ARGS_H | 
|  |  | 
|  | #include <sys/types.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | #include "src/common/macros.h" /* true and false */ | 
|  | #include "src/common/env.h" | 
|  |  | 
|  | /* convert task state ID to equivalent string */ | 
|  | extern char *format_task_dist_states(task_dist_states_t t); | 
|  |  | 
|  | /* print this version of Slurm */ | 
|  | void print_slurm_version(void); | 
|  |  | 
|  | /* print the available gres options */ | 
|  | void print_gres_help(void); | 
|  |  | 
|  | /* | 
|  | * Set distribution type strings from distribution type const. | 
|  | * The value is xmalloc'd and returned in *dist; caller must free. | 
|  | */ | 
|  | void set_distribution(task_dist_states_t distribution, char **dist); | 
|  |  | 
|  | /* check if path2 is subpath of path2 */ | 
|  | extern bool subpath(char *path1, char *path2); | 
|  |  | 
|  | /* verify the requested distribution type */ | 
|  | task_dist_states_t verify_dist_type(const char *arg, uint32_t *plane_size); | 
|  |  | 
|  | /* return command name from its full path name */ | 
|  | char *base_name(const char *command); | 
|  |  | 
|  | /* | 
|  | * str_to_mbytes(): verify that arg is numeric with optional "K", "M", "G" | 
|  | * or "T" at end and return the number in mega-bytes. Default units are MB. | 
|  | */ | 
|  | uint64_t str_to_mbytes(const char *arg); | 
|  |  | 
|  | /* | 
|  | * Reverse the above conversion. Returns an xmalloc()'d string. | 
|  | */ | 
|  | extern char *mbytes_to_str(uint64_t mbytes); | 
|  |  | 
|  | /* Convert a string into a node count */ | 
|  | extern int str_to_nodes(const char *num_str, char **leftover); | 
|  |  | 
|  | /* verify that a node count in arg is of a known form (count or min-max[:step]) */ | 
|  | bool verify_node_count(const char *arg, int *min_nodes, int *max_nodes, | 
|  | char **job_size_str); | 
|  |  | 
|  | /* verify a node list is valid based on the dist and task count given */ | 
|  | bool verify_node_list(char **node_list_pptr, enum task_dist_states dist, | 
|  | int task_count); | 
|  |  | 
|  | /* | 
|  | * get either 1 or 2 integers for a resource count in the form of either | 
|  | * (count, min-max, or '*') | 
|  | * A partial error message is passed in via the 'what' param. | 
|  | * IN arg - argument | 
|  | * IN what - variable name (for errors) | 
|  | * OUT min - first number | 
|  | * OUT max - maximum value if specified, NULL if don't care | 
|  | * IN isFatal - if set, exit on error | 
|  | * RET true if valid | 
|  | */ | 
|  | bool get_resource_arg_range(const char *arg, const char *what, int* min, | 
|  | int *max, bool isFatal); | 
|  |  | 
|  | /* verify resource counts from a complex form of: X, X:X, X:X:X or X:X:X:X */ | 
|  | bool verify_socket_core_thread_count(const char *arg, int *min_sockets, | 
|  | int *min_cores, int *min_threads, | 
|  | cpu_bind_type_t *cpu_bind_type); | 
|  |  | 
|  | /* verify a hint and convert it into the implied settings */ | 
|  | bool verify_hint(const char *arg, int *min_sockets, int *min_cores, | 
|  | int *min_threads, int *ntasks_per_core, | 
|  | cpu_bind_type_t *cpu_bind_type); | 
|  |  | 
|  | /* parse the mail type */ | 
|  | uint16_t parse_mail_type(const char *arg); | 
|  |  | 
|  | /* print the mail type */ | 
|  | char *print_mail_type(const uint16_t type); | 
|  |  | 
|  | /* | 
|  | * search PATH to confirm the location and access mode of the given command | 
|  | * IN cwd - current working directory | 
|  | * IN cmd - command to execute | 
|  | * IN check_cwd_last - if true, search cwd after PATH is checked | 
|  | *                   - if false, search cwd for the command first | 
|  | * IN access_mode - required access rights of cmd | 
|  | * IN test_exec - if false, do not confirm access mode of cmd if full path | 
|  | * RET full path of cmd or NULL if not found | 
|  | */ | 
|  | char *search_path(char *cwd, char *cmd, bool check_cwd_last, int access_mode, | 
|  | bool test_exec); | 
|  |  | 
|  | /* helper function for printing options */ | 
|  | char *print_commandline(const int script_argc, char **script_argv); | 
|  |  | 
|  | /* Translate a signal option string "--signal=<int>[@<time>]" into | 
|  | * it's warn_signal and warn_time components. | 
|  | * RET 0 on success, -1 on failure */ | 
|  | int get_signal_opts(char *optarg, uint16_t *warn_signal, uint16_t *warn_time, | 
|  | uint16_t *warn_flags); | 
|  | /* Return an xmalloc()'d string representing the original cmdline args */ | 
|  | extern char *signal_opts_to_cmdline(uint16_t warn_signal, uint16_t warn_time, | 
|  | uint16_t warn_flags); | 
|  |  | 
|  | /* Convert a signal name to it's numeric equivalent. | 
|  | * Return 0 on failure */ | 
|  | int sig_name2num(const char *signal_name); | 
|  | /* Return an xmalloc()'d string reversing the above conversion */ | 
|  | extern char *sig_num2name(int signal); | 
|  |  | 
|  | /* | 
|  | * parse_uint16/32/64 - Convert ascii string to a 16/32/64 bit unsigned int. | 
|  | * IN      aval - ascii string. | 
|  | * IN/OUT  ival - 16/32/64 bit pointer. | 
|  | * RET     0 if no error, 1 otherwise. | 
|  | */ | 
|  | extern int parse_uint16(char *aval, uint16_t *ival); | 
|  | extern int parse_uint32(char *aval, uint32_t *ival); | 
|  | extern int parse_uint64(char *aval, uint64_t *ival); | 
|  |  | 
|  | /* Get a decimal integer from arg | 
|  | * IN      name - command line name | 
|  | * IN      val - command line argument value | 
|  | * IN      positive - true if number needs to be greater than 0 | 
|  | * RET     Returns the integer on success, exits program on failure. | 
|  | */ | 
|  | extern int parse_int(const char *name, const char *val, bool positive); | 
|  |  | 
|  |  | 
|  | /* print_db_notok() - Print an error message about slurmdbd | 
|  | *                    is unreachable or wrong cluster name. | 
|  | * IN  cname - char * cluster name | 
|  | * IN  isenv - bool   cluster name from env or from command line option. | 
|  | */ | 
|  | extern void print_db_notok(const char *cname, bool isenv); | 
|  |  | 
|  | /* | 
|  | * parse_resv_flags() used to parse the Flags= option.  It handles | 
|  | * daily, weekly, static_alloc, part_nodes, and maint, optionally | 
|  | * preceded by + or -, separated by a comma but no spaces. | 
|  | * | 
|  | * flagstr IN - reservation flag string | 
|  | * msg IN - string to append to error message (e.g. function name) | 
|  | * resv_msg_ptr IN/OUT - sets flags and times in ptr. | 
|  | * RET equivalent reservation flag bits | 
|  | */ | 
|  | extern uint64_t parse_resv_flags(const char *flagstr, const char *msg, | 
|  | resv_desc_msg_t  *resv_msg_ptr); | 
|  |  | 
|  | extern uint16_t parse_compress_type(const char *arg); | 
|  |  | 
|  | extern int parse_send_libs(const char *arg); | 
|  |  | 
|  | extern int validate_acctg_freq(char *acctg_freq); | 
|  |  | 
|  | extern bool valid_runtime_directory(char *runtime_dir); | 
|  |  | 
|  | /* | 
|  | * Format a tres_per_* argument | 
|  | * dest OUT - resulting string | 
|  | * prefix IN - TRES type (e.g. "gpu") | 
|  | * src IN - user input, can include multiple comma-separated specifications | 
|  | */ | 
|  | extern void xfmt_tres(char **dest, char *prefix, char *src); | 
|  |  | 
|  | /* | 
|  | * Format a tres_freq argument | 
|  | * dest OUT - resulting string | 
|  | * prefix IN - TRES type (e.g. "gpu") | 
|  | * src IN - user input | 
|  | */ | 
|  | extern void xfmt_tres_freq(char **dest, char *prefix, char *src); | 
|  |  | 
|  | #endif /* !_PROC_ARGS_H */ |