/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*
*/
#ifndef NETLOC_UTIL_H_INCLUDED
#define NETLOC_UTIL_H_INCLUDED
#include "netloc.h"
typedef enum {
MPIR_NETLOC_NETWORK_TYPE__FAT_TREE,
MPIR_NETLOC_NETWORK_TYPE__CLOS_NETWORK,
MPIR_NETLOC_NETWORK_TYPE__TORUS,
MPIR_NETLOC_NETWORK_TYPE__INVALID,
} MPIR_Netloc_network_topo_type;
typedef struct {
MPIR_Netloc_network_topo_type type;
union {
struct {
/* The levels at which the host and switch nodes are in
* the network */
int *node_levels;
} tree;
struct {
int dimension;
int *geometry;
/* Flat index of the node the current
* rank is mapped to */
int node_idx;
} torus;
} u;
netloc_node_t *network_endpoint;
} MPIR_Netloc_network_attributes;
int MPIR_Netloc_parse_topology(netloc_topology_t topology,
MPIR_Netloc_network_attributes * network_attr);
int MPIR_Netloc_get_network_end_point(MPIR_Netloc_network_attributes,
netloc_topology_t netloc_topology,
hwloc_topology_t hwloc_topology, netloc_node_t ** end_point);
int MPIR_Netloc_get_switches_at_level(netloc_topology_t netloc_topology,
MPIR_Netloc_network_attributes attributes, int level,
netloc_node_t *** switches_at_level, int *switch_count);
int MPIR_Netloc_get_hostnode_index_in_tree(MPIR_Netloc_network_attributes attributes,
netloc_topology_t topology,
netloc_node_t * network_endpoint,
int *index, int *num_nodes);
#endif /* NETLOC_UTIL_H_INCLUDED */