1 /*
2  * Copyright (C) by Argonne National Laboratory
3  *     See COPYRIGHT in top-level directory
4  */
5 
6 #ifndef MPIR_NETTOPO_H_INCLUDED
7 #define MPIR_NETTOPO_H_INCLUDED
8 
9 /*
10  * Network topology types
11  */
12 typedef enum {
13     MPIR_NETTOPO_TYPE__FAT_TREE,
14     MPIR_NETTOPO_TYPE__CLOS_NETWORK,
15     MPIR_NETTOPO_TYPE__TORUS,
16     MPIR_NETTOPO_TYPE__INVALID
17 } MPIR_nettopo_type_e;
18 
19 /*
20  * Network node types
21  */
22 typedef enum {
23     MPIR_NETTOPO_NODE_TYPE__HOST,
24     MPIR_NETTOPO_NODE_TYPE__SWITCH,
25     MPIR_NETTOPO_NODE_TYPE__INVALID
26 } MPIR_nettopo_node_type_e;
27 
28 /*
29  * Definitions for network objects
30  */
31 typedef void *MPIR_nettopo_node_t;
32 typedef void *MPIR_nettopo_edge_t;
33 
34 int MPII_nettopo_init(void);
35 
36 int MPII_nettopo_finalize(void);
37 
38 /*
39  * Return network topology type
40  */
41 MPIR_nettopo_type_e MPIR_nettopo_get_type(void);
42 
43 /*
44  * Return network topology node type
45  */
46 MPIR_nettopo_node_type_e MPIR_nettopo_get_node_type(MPIR_nettopo_node_t node);
47 
48 /*
49  * Return a pointer to this node in network topology
50  */
51 MPIR_nettopo_node_t MPIR_nettopo_get_endpoint(void);
52 
53 /*
54  * Return edge destination node
55  */
56 MPIR_nettopo_node_t MPIR_nettopo_get_edge_dest_node(MPIR_nettopo_edge_t edge);
57 
58 /*
59  * Return __uid__ of node in network topology
60  */
61 int MPIR_nettopo_get_node_uid(MPIR_nettopo_node_t node);
62 
63 /*
64  * Return number of nodes in network topology
65  */
66 int MPIR_nettopo_get_num_nodes(void);
67 
68 /*
69  * Return the number of edges and edge pointers for this node in network topology
70  */
71 int MPIR_nettopo_get_all_edges(MPIR_nettopo_node_t node, int *num_edges,
72                                MPIR_nettopo_edge_t ** edges);
73 
74 /*
75  * Return node level in tree network topology
76  */
77 int *MPIR_nettopo_tree_get_node_levels(void);
78 
79 /*
80  * Return the hostnode index in the tree network topology
81  */
82 int MPIR_nettopo_tree_get_hostnode_index(int *node_index, int *num_nodes);
83 
84 /*
85  * Return list of switches at certain level in the tree network topology
86  */
87 int MPIR_nettopo_tree_get_switches_at_level(int switch_level,
88                                             MPIR_nettopo_node_t ** switches_at_level,
89                                             int *switch_count);
90 
91 /*
92  * Return dimension of the torus network topology
93  */
94 int MPIR_nettopo_torus_get_dimension(void);
95 
96 /*
97  * Return geometry of the torus network topology
98  */
99 int *MPIR_nettopo_torus_get_geometry(void);
100 
101 /*
102  * Return node index in the torus network topology
103  */
104 int MPIR_nettopo_torus_get_node_index(void);
105 
106 #endif /* MPIR_NETTOPO_H_INCLUDED */
107