Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 10:12:54

0001 /* -*- C -*-
0002  *
0003  * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
0004  *                         University Research and Technology
0005  *                         Corporation.  All rights reserved.
0006  * Copyright (c) 2004-2006 The University of Tennessee and The University
0007  *                         of Tennessee Research Foundation.  All rights
0008  *                         reserved.
0009  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
0010  *                         University of Stuttgart.  All rights reserved.
0011  * Copyright (c) 2004-2005 The Regents of the University of California.
0012  *                         All rights reserved.
0013  * Copyright (c) 2012      Los Alamos National Security, Inc.  All rights reserved.
0014  * Copyright (c) 2014-2020 Intel, Inc.  All rights reserved.
0015  * Copyright (c) 2015-2020 Research Organization for Information Science
0016  *                         and Technology (RIST).  All rights reserved.
0017  * Copyright (c) 2021-2024 Nanook Consulting  All rights reserved.
0018  * Copyright (c) 2023      Triad National Security, LLC. All rights reserved.
0019  * $COPYRIGHT$
0020  *
0021  * Additional copyrights may follow
0022  *
0023  * $HEADER$
0024  *
0025  */
0026 #ifndef PMIX_PTL_BASE_H_
0027 #define PMIX_PTL_BASE_H_
0028 
0029 #include "src/include/pmix_config.h"
0030 
0031 #ifdef HAVE_SYS_TIME_H
0032 #    include <sys/time.h> /* for struct timeval */
0033 #endif
0034 #ifdef HAVE_STRING_H
0035 #    include <string.h>
0036 #endif
0037 
0038 #include "src/class/pmix_pointer_array.h"
0039 #include "src/mca/base/pmix_mca_base_framework.h"
0040 #include "src/mca/mca.h"
0041 
0042 #include "src/include/pmix_globals.h"
0043 #include "src/include/pmix_stdatomic.h"
0044 #include "src/mca/ptl/base/ptl_base_handshake.h"
0045 #include "src/mca/ptl/ptl.h"
0046 
0047 BEGIN_C_DECLS
0048 
0049 /*
0050  * MCA Framework
0051  */
0052 PMIX_EXPORT extern pmix_mca_base_framework_t pmix_ptl_base_framework;
0053 /**
0054  * PTL select function
0055  *
0056  * Cycle across available components and construct the list
0057  * of active modules
0058  */
0059 PMIX_EXPORT pmix_status_t pmix_ptl_base_select(void);
0060 
0061 /* framework globals */
0062 struct pmix_ptl_base_t {
0063     bool initialized;
0064     bool selected;
0065     pmix_list_t posted_recvs; // list of pmix_ptl_posted_recv_t
0066     pmix_list_t unexpected_msgs;
0067     pmix_listener_t listener;
0068     struct sockaddr_storage *connection;
0069     uint32_t current_tag;
0070     size_t max_msg_size;
0071     char *session_tmpdir;
0072     char *system_tmpdir;
0073     char *report_uri;
0074     char *uri;
0075     char *urifile;
0076     char *sysctrlr_filename;
0077     char *scheduler_filename;
0078     char *system_filename;
0079     char *session_filename;
0080     char *nspace_filename;
0081     char *pid_filename;
0082     char *rendezvous_filename;
0083     bool created_rendezvous_file;
0084     bool created_session_tmpdir;
0085     bool created_system_tmpdir;
0086     bool created_sysctrlr_filename;
0087     bool created_scheduler_filename;
0088     bool created_system_filename;
0089     bool created_session_filename;
0090     bool created_nspace_filename;
0091     bool created_pid_filename;
0092     bool created_urifile;
0093     bool remote_connections;
0094     bool system_tool;
0095     bool session_tool;
0096     bool tool_support;
0097     char *if_include;
0098     char *if_exclude;
0099     int ipv4_port;
0100     bool disable_ipv4_family;
0101     int ipv6_port;
0102     bool disable_ipv6_family;
0103     int max_retries;
0104     int wait_to_connect;
0105     int handshake_wait_time;
0106     int handshake_max_retries;
0107 };
0108 typedef struct pmix_ptl_base_t pmix_ptl_base_t;
0109 
0110 PMIX_EXPORT extern pmix_ptl_base_t pmix_ptl_base;
0111 
0112 typedef struct {
0113     pmix_list_item_t super;
0114     int sd;
0115     char *nspace;
0116     pmix_rank_t rank;
0117     char *uri;
0118     char *version;
0119 } pmix_connection_t;
0120 PMIX_CLASS_DECLARATION(pmix_connection_t);
0121 
0122 /* API stubs */
0123 PMIX_EXPORT pmix_status_t pmix_ptl_base_set_notification_cbfunc(pmix_ptl_cbfunc_t cbfunc);
0124 PMIX_EXPORT pmix_status_t pmix_ptl_base_connect_to_peer(struct pmix_peer_t *peer,
0125                                                         pmix_info_t info[], size_t ninfo,
0126                                                         char **suri);
0127 PMIX_EXPORT pmix_status_t pmix_ptl_base_parse_uri_file(char *filename,
0128                                                        bool optional,
0129                                                        pmix_list_t *connections);
0130 
0131 PMIX_EXPORT pmix_status_t pmix_ptl_base_setup_connection(char *uri,
0132                                                          struct sockaddr_storage *connection,
0133                                                          size_t *len);
0134 
0135 PMIX_EXPORT void pmix_ptl_base_post_recv(int fd, short args, void *cbdata);
0136 PMIX_EXPORT void pmix_ptl_base_cancel_recv(int sd, short args, void *cbdata);
0137 
0138 PMIX_EXPORT pmix_status_t pmix_ptl_base_start_listening(pmix_info_t info[], size_t ninfo);
0139 PMIX_EXPORT void pmix_ptl_base_stop_listening(void);
0140 PMIX_EXPORT pmix_status_t pmix_base_write_rndz_file(char *filename, char *uri, bool *created);
0141 
0142 /* base support functions */
0143 PMIX_EXPORT pmix_status_t pmix_ptl_base_check_server_uris(pmix_peer_t *peer, char **evar);
0144 PMIX_EXPORT pmix_status_t pmix_ptl_base_check_directives(pmix_info_t *info, size_t ninfo);
0145 PMIX_EXPORT pmix_status_t pmix_ptl_base_setup_fork(const pmix_proc_t *proc, char ***env);
0146 PMIX_EXPORT void pmix_ptl_base_send_handler(int sd, short flags, void *cbdata);
0147 PMIX_EXPORT void pmix_ptl_base_recv_handler(int sd, short flags, void *cbdata);
0148 PMIX_EXPORT void pmix_ptl_base_process_msg(int fd, short flags, void *cbdata);
0149 PMIX_EXPORT pmix_status_t pmix_ptl_base_set_nonblocking(int sd);
0150 PMIX_EXPORT pmix_status_t pmix_ptl_base_set_blocking(int sd);
0151 PMIX_EXPORT pmix_status_t pmix_ptl_base_send_blocking(int sd, char *ptr, size_t size);
0152 PMIX_EXPORT pmix_status_t pmix_ptl_base_recv_blocking(int sd, char *data, size_t size);
0153 PMIX_EXPORT pmix_status_t pmix_ptl_base_connect(struct sockaddr_storage *addr, pmix_socklen_t len,
0154                                                 int *fd);
0155 PMIX_EXPORT void pmix_ptl_base_connection_handler(int sd, short args, void *cbdata);
0156 PMIX_EXPORT pmix_status_t pmix_ptl_base_setup_listener(pmix_info_t info[], size_t ninfo);
0157 PMIX_EXPORT pmix_status_t pmix_ptl_base_send_connect_ack(int sd);
0158 PMIX_EXPORT pmix_status_t pmix_ptl_base_recv_connect_ack(int sd);
0159 PMIX_EXPORT void pmix_ptl_base_lost_connection(pmix_peer_t *peer, pmix_status_t err);
0160 PMIX_EXPORT bool pmix_ptl_base_peer_is_earlier(pmix_peer_t *peer, uint8_t major, uint8_t minor,
0161                                                uint8_t release);
0162 PMIX_EXPORT void pmix_ptl_base_query_servers(int sd, short args, void *cbdata);
0163 PMIX_EXPORT pmix_status_t pmix_ptl_base_parse_uri(const char *evar, char **nspace,
0164                                                   pmix_rank_t *rank, char **suri);
0165 PMIX_EXPORT pmix_status_t pmix_ptl_base_df_search(char *dirname, char *prefix, pmix_info_t info[],
0166                                                   size_t ninfo, bool optional, pmix_list_t *connections);
0167 PMIX_EXPORT pmix_rnd_flag_t pmix_ptl_base_set_flag(size_t *sz);
0168 PMIX_EXPORT pmix_status_t pmix_ptl_base_make_connection(pmix_peer_t *peer, char *suri,
0169                                                         pmix_info_t *iptr, size_t niptr);
0170 PMIX_EXPORT void pmix_ptl_base_complete_connection(pmix_peer_t *peer, char *nspace,
0171                                                    pmix_rank_t rank);
0172 PMIX_EXPORT pmix_status_t pmix_ptl_base_set_timeout(pmix_peer_t *peer, struct timeval *save,
0173                                                     pmix_socklen_t *sz, bool *sockopt);
0174 PMIX_EXPORT void pmix_ptl_base_setup_socket(pmix_peer_t *peer);
0175 PMIX_EXPORT pmix_status_t pmix_ptl_base_client_handshake(pmix_peer_t *peer, pmix_status_t reply);
0176 PMIX_EXPORT pmix_status_t pmix_ptl_base_tool_handshake(pmix_peer_t *peer, pmix_status_t rp);
0177 PMIX_EXPORT char **pmix_ptl_base_split_and_resolve(const char *orig_str,
0178                                                    const char *name);
0179 PMIX_EXPORT pmix_status_t pmix_ptl_base_set_peer(pmix_peer_t *peer, char *evar);
0180 PMIX_EXPORT char *pmix_ptl_base_get_cmd_line(void);
0181 
0182 END_C_DECLS
0183 
0184 #endif