/*
 * Copyright (c) 2001-2003 The Trustees of Indiana University.  
 *                         All rights reserved.
 * Copyright (c) 1998-2001 University of Notre Dame. 
 *                         All rights reserved.
 * Copyright (c) 1994-1998 The Ohio State University.  
 *                         All rights reserved.
 * 
 * This file is part of the LAM/MPI software package.  For license
 * information, see the LICENSE file in the top level directory of the
 * LAM/MPI source distribution.
 * 
 * $HEADER$
 *
 * $Id: impid.h,v 6.20 2003/02/04 00:24:17 jsquyres Exp $
 *
 *	Function:	- IMPI client daemon header file
 */

#ifndef _LAM_IMPID_H_
#define _LAM_IMPID_H_

#ifdef __cplusplus
extern "C" {
#endif


#include <poll.h>

/*
 * Array indices
 */

enum {
  IMPI_NO_LABEL_I,

  IMPI_C_VERSION_I,
  IMPI_C_NHOSTS_I,
  IMPI_C_NPROCS_I,
  IMPI_C_DATALEN_I,
  IMPI_C_TAGUB_I,
  IMPI_C_COLL_XSIZE_I,
  IMPI_C_COLL_MAXLINEAR_I,
  
  IMPI_H_IPV6_I,
  IMPI_H_PORT_I,
  IMPI_H_NPROCS_I,
  IMPI_H_ACKMARK_I,
  IMPI_H_HIWATER_I,
  
  IMPI_P_IPV6_I,
  IMPI_P_PID_I,

  IMPI_MAX_I
};


/*
 * external variables
 * Only within the impid
 */
extern IMPI_Int4 *cdata[IMPI_MAX_I];
extern MPI_Comm parent_intra;

extern IMPI_Uint4 nclients;                
extern IMPI_Uint4 nhosts;                  
extern IMPI_Uint4 nprocs;                  
extern IMPI_Uint4 my_host_rank;
extern IMPI_Uint4 num_lamprocs;  
extern int my_client_rank;
extern int start_rank;
extern int impi_lam_datalen;
extern int impi_lam_ackmark;
extern int impi_lam_hiwater;
extern int impi_lam_coll_xsize;
extern int impi_lam_coll_maxlinear;
extern IMPI_Uint4 impi_nfinal_msgs;
extern IMPI_Uint4 impi_npkfini_msgs;
extern IMPI_Uint4 impi_sent_pkfini_msgs;


/*
 * dance.c
 */
char *impi_sprintf_ipaddr(IMPI_Uint4 addr);
IMPI_Uint4 impi_get_my_ipaddress(void);
int impi_dance(int my_dance_fd);


/*
 * impid.c
 */
void impi_bail(int code);


/*
 * lamnodes.c
 */
int impi_setup_server_info(void);
int impi_distrib_server_info(int err);


/*
 * router.*.c
 */
void do_router(void);


/*
 * endian.c
 */
void lam_swap_endian(void *buf, int size);


/*
 * host.cc
 */
int *impi_host_init(void);
int impi_host_recv(int src_host, struct pollfd *poll_fd);
int impi_host_send_pkfini_msgs(struct pollfd *h_fds);


/*
 * sequence.c
 */
IMPI_Uint8 get_new_seqnum(void);
IMPI_Uint8 release_seqnum(IMPI_Uint8);
IMPI_Uint8 get_new_srqid(void);
IMPI_Uint8 release_srqid(IMPI_Uint8);
IMPI_Uint8 get_new_drqid(void);
IMPI_Uint8 release_drqid(IMPI_Uint8);
IMPI_Uint8 get_new_localcid(void);
IMPI_Uint8 release_localcid(IMPI_Uint8);


/*
 * server.c
 */
int impi_server_connect(char *server, int port);
int impi_server_do_work(IMPI_Uint4 ipaddress, int dance_port);
void impi_server_disconnect(void);
void impi_server_bail(int code);

#ifdef __cplusplus
}
#endif

#endif


syntax highlighted by Code2HTML, v. 0.9.1