/* -*- c -*- */
/*
* 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$
*
*/
/* This file defines all of the constants as specified in the IMPI
Standard. */
#ifndef _impi_defs_h_
#define _impi_defs_h_
#define IMPI_VERSION 0
#define IMPI_MAX_CLIENTS 32
#define IMPI_MINIMUM_TAG_UB 32767 /* 2^15 - 1 */
#define IMPI_MINIMUM_DATA_LEN 1
/* Maximum number of standardized AUTHs. */
#define MAX_AUTH 2
/* Server-Client protocol constants. */
#define IMPI_CMD_AUTH 0x41555448 /* ASCII for 'AUTH' */
#define IMPI_CMD_IMPI 0x494D5049 /* ASCII for 'IMPI' */
#define IMPI_CMD_COLL 0x434F4C4C /* ASCII for 'COLL' */
#define IMPI_CMD_DONE 0x444F4E45 /* ASCII for 'DONE' */
#define IMPI_CMD_FINI 0x46494E49 /* ASCII for 'FINI' */
/* Client IMPI_CMD_COLL ('COLL') command labels. */
#define IMPI_NO_LABEL 0x0000
/* Per-Client labels for the 'COLL' commands. */
#define IMPI_C_VERSION 0x1000
#define IMPI_C_NHOSTS 0x1100
#define IMPI_C_NPROCS 0x1200
#define IMPI_C_DATALEN 0x1300
#define IMPI_C_TAGUB 0x1400
#define IMPI_C_COLL_XSIZE 0x1500
#define IMPI_C_COLL_MAXLINEAR 0x1600
/* Per-Host labels for the 'COLL' commands. */
#define IMPI_H_IPV6 0x2000
#define IMPI_H_PORT 0x2100
#define IMPI_H_NPROCS 0x2200
#define IMPI_H_ACKMARK 0x2300
#define IMPI_H_HIWATER 0x2400
/* Per-Proc labels for the 'COLL' commands. */
#define IMPI_P_IPV6 0x3000
#define IMPI_P_PID 0x3100
/*
* Various sizes
*/
#define IMPI_INT4_TYPE int
#define IMPI_INT8_TYPE long long
#define IMPI_UINT4_TYPE unsigned int
#define IMPI_UINT8_TYPE unsigned long long
/*
* Authentication defines
*/
#define IMPI_AUTH_NONE 0
#define IMPI_AUTH_KEY 1
/*
* typedefing IMPI sizes
*/
typedef unsigned char IMPI_Uint1;
typedef IMPI_INT4_TYPE IMPI_Int4;
typedef IMPI_INT8_TYPE IMPI_Int8;
typedef IMPI_UINT4_TYPE IMPI_Uint4;
typedef IMPI_UINT8_TYPE IMPI_Uint8;
/* All the structures for the various commands that get sent */
typedef struct {
IMPI_Int4 cmd; /* command code */
IMPI_Int4 len; /* length in bytes of command payload */
} IMPI_Cmd;
typedef struct {
IMPI_Uint4 auth_mask;
} IMPI_Client_auth;
typedef struct {
IMPI_Int4 which;
IMPI_Int4 len;
} IMPI_Server_auth;
typedef struct {
IMPI_Uint8 key; /* 64 bits */
} IMPI_Auth_key;
typedef union {
IMPI_Int4 rank; /* rank of this client in IMPI job */
IMPI_Int4 size; /* total # of clients in IMPI job */
} IMPI_Impi;
typedef struct {
IMPI_Int4 label;
} IMPI_Coll;
typedef struct {
IMPI_Int4 label;
IMPI_Uint4 client_mask;
} IMPI_Chdr;
typedef struct {
IMPI_Uint4 major;
IMPI_Uint4 minor;
} IMPI_Version;
/* Chapter 3 Structures */
typedef struct {
IMPI_Uint1 p_hostid[16]; /* host identifier */
IMPI_Int8 p_pid; /* local process identifier */
} IMPI_Proc;
typedef struct {
IMPI_Uint4 pk_type; /* packet type */
#define IMPI_PK_DATA 0 /* message data */
#define IMPI_PK_DATASYNC 1 /* message data (sync) */
#define IMPI_PK_PROTOACK 2 /* protocol ACK */
#define IMPI_PK_SYNCACK 3 /* synchronization ACK */
#define IMPI_PK_CANCEL 4 /* cancel request */
#define IMPI_PK_CANCELYES 5 /* 'yes' cancel reply */
#define IMPI_PK_CANCELNO 6 /* 'no' cancel reply */
#define IMPI_PK_FINI 7 /* agent end-of-communications */
IMPI_Uint4 pk_len; /* packet data length */
IMPI_Proc pk_src; /* source process */
IMPI_Proc pk_dest; /* destination process */
IMPI_Uint8 pk_srqid; /* source request ID */
IMPI_Uint8 pk_drqid; /* destination request ID */
IMPI_Uint8 pk_msglen; /* total message length */
IMPI_Int4 pk_lsrank; /* comm-local source rank */
IMPI_Int4 pk_tag; /* message tag */
IMPI_Uint8 pk_cid; /* context ID */
IMPI_Uint8 pk_seqnum; /* message sequence # */
IMPI_Int8 pk_count; /* QoS: message count */
IMPI_Uint8 pk_dtype; /* QoS: message datatype */
IMPI_Uint8 pk_reserved; /* for future use */
} IMPI_Packet;
#endif
syntax highlighted by Code2HTML, v. 0.9.1