#ifndef PMIX_GDS_SHMEM2_H
#define PMIX_GDS_SHMEM2_H
#include "pmix_config.h"
#include "include/pmix_common.h"
#include "src/include/pmix_globals.h"
#include "src/util/pmix_shmem.h"
#include "src/mca/gds/base/base.h"
#ifdef HAVE_STDINT_h
#include <stdint.h>
#endif
#define PMIX_GDS_SHMEM2_NAME "shmem2"
#define PMIX_GDS_SHMEM2_DEFAULT_PRIORITY 20
BEGIN_C_DECLS
extern pmix_gds_base_module_t pmix_shmem2_module;
PMIX_EXPORT extern double pmix_gds_shmem2_segment_size_multiplier;
typedef enum {
PMIX_GDS_SHMEM2_JOB_ID = 0,
PMIX_GDS_SHMEM2_SESSION_ID,
PMIX_GDS_SHMEM2_MODEX_ID,
PMIX_GDS_SHMEM2_INVALID_ID
} pmix_gds_shmem2_job_shmem2_id_t;
typedef uint8_t pmix_gds_shmem2_status_t;
typedef enum {
PMIX_GDS_SHMEM2_MINE = 0x01,
PMIX_GDS_SHMEM2_ATTACHED = 0x02,
PMIX_GDS_SHMEM2_READY_FOR_USE = 0x04
} pmix_gds_shmem2_status_flag_t;
typedef struct {
pmix_gds_base_component_t super;
pmix_list_t jobs;
pmix_list_t sessions;
} pmix_gds_shmem2_component_t;
PMIX_EXPORT extern
pmix_gds_shmem2_component_t pmix_mca_gds_shmem2_component;
typedef struct {
pmix_list_item_t super;
char *name;
} pmix_gds_shmem2_host_alias_t;
PMIX_CLASS_DECLARATION(pmix_gds_shmem2_host_alias_t);
typedef struct {
pmix_list_item_t super;
uint32_t nodeid;
char *hostname;
pmix_list_t *aliases;
pmix_list_t *info;
} pmix_gds_shmem2_nodeinfo_t;
PMIX_CLASS_DECLARATION(pmix_gds_shmem2_nodeinfo_t);
typedef struct {
pmix_tma_t tma;
void *current_addr;
uint32_t id;
pmix_list_t *sessioninfo;
pmix_list_t *nodeinfo;
} pmix_gds_shmem2_shared_session_data_t;
typedef struct {
pmix_list_item_t super;
pmix_shmem_t *shmem2;
pmix_gds_shmem2_status_t shmem2_status;
pmix_gds_shmem2_shared_session_data_t *smdata;
} pmix_gds_shmem2_session_t;
PMIX_CLASS_DECLARATION(pmix_gds_shmem2_session_t);
typedef struct {
pmix_tma_t tma;
void *current_addr;
pmix_list_t *jobinfo;
pmix_list_t *nodeinfo;
pmix_list_t *appinfo;
pmix_hash_table_t *local_hashtab;
} pmix_gds_shmem2_shared_job_data_t;
typedef struct {
pmix_tma_t tma;
void *current_addr;
pmix_hash_table_t *hashtab;
} pmix_gds_shmem2_shared_modex_data_t;
typedef struct {
pmix_list_item_t super;
uid_t uid;
gid_t gid;
bool chown;
bool chgrp;
char *nspace_id;
pmix_namespace_t *nspace;
pmix_gds_shmem2_session_t *session;
pmix_gds_shmem2_status_t shmem2_status;
pmix_shmem_t *shmem2;
pmix_gds_shmem2_status_t modex_shmem2_status;
pmix_shmem_t *modex_shmem2;
pmix_gds_shmem2_shared_job_data_t *smdata;
pmix_gds_shmem2_shared_modex_data_t *smmodex;
pmix_buffer_t *conni;
bool client_keyindex_fixup_done;
} pmix_gds_shmem2_job_t;
PMIX_EXPORT PMIX_CLASS_DECLARATION(pmix_gds_shmem2_job_t);
typedef struct {
pmix_list_item_t super;
uint32_t appnum;
pmix_list_t *appinfo;
pmix_list_t *nodeinfo;
pmix_gds_shmem2_job_t *job;
} pmix_gds_shmem2_app_t;
PMIX_CLASS_DECLARATION(pmix_gds_shmem2_app_t);
END_C_DECLS
#endif