/*****************************************************************************\
 *  spank.h -- plugin stack handling
 *****************************************************************************
 *  Copyright (C) 2005 The Regents of the University of California.
 *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 *  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.
\*****************************************************************************/

#ifndef _COMMON_SPANK_H
#define _COMMON_SPANK_H

#include <config.h>

#define _GNU_SOURCE

#include <getopt.h>

#include "src/slurmd/slurmstepd/slurmstepd_job.h"

#define SPANK_OPTION_ENV_PREFIX "_SLURM_SPANK_OPTION_"

/*
 *  SPANK plugin hook types
 */
typedef enum {
	SPANK_INIT = 0,
	SPANK_JOB_PROLOG = 2,
	SPANK_INIT_POST_OPT,
	SPANK_LOCAL_USER_INIT,
	SPANK_STEP_USER_INIT,
	SPANK_STEP_TASK_INIT_PRIV,
	SPANK_STEP_USER_TASK_INIT,
	SPANK_STEP_TASK_POST_FORK,
	SPANK_STEP_TASK_EXIT,
	SPANK_JOB_EPILOG,
	SPANK_SLURMD_EXIT,
	SPANK_EXIT,
} step_fn_t;

struct spank_launcher_job_info {
	uid_t       uid;
	gid_t       gid;
	uint32_t    jobid;
	uint32_t    stepid;
	slurm_step_layout_t *step_layout;
	int         argc;
	char      **argv;
};

int spank_init(stepd_step_rec_t *step);

int spank_slurmd_init (void);

int spank_job_prolog(uint32_t jobid, uid_t uid, gid_t gid);

int spank_init_allocator (void);

int spank_init_post_opt (void);

int spank_user(stepd_step_rec_t *step);

int spank_local_user (struct spank_launcher_job_info *job);

int spank_task_privileged(stepd_step_rec_t *step, int taskid);

int spank_user_task(stepd_step_rec_t *step, int taskid);

int spank_task_post_fork(stepd_step_rec_t *step, int taskid);

int spank_task_exit(stepd_step_rec_t *step, int taskid);

int spank_job_epilog(uint32_t jobid, uid_t uid, gid_t gid);

int spank_slurmd_exit (void);

int spank_fini(stepd_step_rec_t *step);

/*
 * Return true if a loaded spank plugin has a prolog function defined.
 */
extern bool spank_has_prolog(void);

/*
 * Return true if a loaded spank plugin has an epilog function defined.
 */
extern bool spank_has_epilog(void);

/*
 * Return true if a loaded spank plugin has a user_init function defined.
 */
extern bool spank_has_user_init(void);

/*
 * Return true if a loaded spank plugin has a task_post_fork function defined.
 */
extern bool spank_has_task_post_fork(void);

/*
 * Return true if a loaded spank plugin has a task_exit function defined.
 */
extern bool spank_has_task_exit(void);

/*
 *  Option processing
 */

/*
 *  Create a struct option table (suitable for passing to getopt_long())
 *   from SPANK plugin provided options, optionally prepending an existing
 *   table of options `orig_options'  Result must be freed by
 *   spank_option_table_destroy().
 *
 *  If any options in orig_options conflict with internal spank options,
 *   a warning will be printed and the spank option will be disabled.
 *
 */
struct option *spank_option_table_create (const struct option *orig_options);

/*
 *  Free memory associated with an option table created by
 *   spank_p[tion_table_create.
 */
void spank_option_table_destroy (struct option *opt_table);

/*
 *  Process all spank options in the environment calling the options callback if
 *  found. The option should handle being called twice -- environment variable
 *  and by command line.
 *
 *  Returns <0 if any option's callback fails. Zero otherwise.
 */
extern int spank_process_env_options(void);

/*
 *  Process a single spank option which was tagged by `optval' in the
 *   spank option table. If the option takes and argument (i.e. has_arg = 1)
 *   then optarg must be non-NULL.
 *
 *  Returns < 0 if no option is found which matches `optval', or if
 *   the option belongs to a *required* plugin, and the plugin's callback
 *   for that option fails.
 */
int spank_process_option (int optval, const char *optarg);

/*
 *  Generate --help style output on stream `fp' for all internal spank
 *   options which were not previously disabled (e.g. due to conflicts
 *   with existing options or other plugins). `width' defines the column
 *   after which the usage text may be displayed, and `left_pad' is the
 *   amount of space to pad on the left before printing the --option.
 */
void spank_print_options(FILE *fp, int left_pad, int width);

/*  Set all registered remote options (i.e. those passed to
 *   spank_process_option) in the job options `options'.
 */
void spank_set_remote_options(list_t *options);

/*  Clear any spank remote options encoded in environment.
 */
void spank_clear_remote_options_env(char **env);

/*
 * spank_get_plugin_names
 * Get names of all spank plugins
 *
 * Parameters:
 *   names IN/OUT: pointer to char ** (should be NULL when called)
 *                 output of function is allocated memory for the
 *                 array of string pointers, and allocated memory
 *                 for the strings.  Array will be NULL terminated.
 *                 Caller should manage the memory.
 * Returns:
 *   number of allocated strings (excluding NULL terminator)
 */
size_t spank_get_plugin_names(char ***names);

/*
 * spank_get_plugin_option_names
 * Get names of all spank plugins
 *
 * Parameters:
 * IN plugin_name	- Name of spank plugin being considered
 *			  (e.g., from spank_get_plugin_names)
 * IN/OUT opts		- Pointer to char ** (should be NULL when called)
 *			  output of function is allocated memory for the array
 *			  of string pointers, and allocated memory for the
 *			  strings. Array will be NULL terminated. Caller
 *			  should manage the memory.
 * Returns:
 *			- Number of allocated strings (excluding NULL
 *			  terminator)
 */
size_t spank_get_plugin_option_names(const char *plugin_name, char ***opts);

/*
 * Get option value by common option name
 */
extern char *spank_option_get(char *optname);

/*
 * Get plugin name by common option name
 */
extern char *spank_option_plugin(char *optname);

/*
 * Is option set? Discover by common option name
 */
extern bool spank_option_isset(char *optname);

/*
 * Function for iterating through all the common option data structure
 * and returning (via parameter arguments) the name and value of each
 * set slurm option.
 *
 * OUT plugin	- pointer to string to store the plugin name
 * OUT name	- pointer to string to store the option name
 * OUT value	- pointer to string to store the value
 * IN/OUT state	- internal state, should point to NULL for the first call
 * RETURNS	- true if plugin/name/value set; false if no more options
 */
extern bool spank_option_get_next_set(char **plugin, char **name,
				      char **value, void **state);
#endif /* !_COMMON_SPANK_H */
