root/opal/mca/reachable/reachable.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
   4  * Copyright (c) 2015      Los Alamos National Security, LLC. All rights
   5  *                         reserved.
   6  * Copyright (c) 2017      Amazon.com, Inc. or its affiliates.
   7  *                         All Rights reserved.
   8  * $COPYRIGHT$
   9  *
  10  * Additional copyrights may follow
  11  *
  12  * $HEADER$
  13  */
  14 
  15 #ifndef OPAL_REACHABLE_H
  16 #define OPAL_REACHABLE_H
  17 
  18 #include "opal_config.h"
  19 #include "opal/types.h"
  20 #include "opal/class/opal_object.h"
  21 
  22 #include "opal/mca/mca.h"
  23 #include "opal/mca/if/if.h"
  24 
  25 
  26 BEGIN_C_DECLS
  27 
  28 /**
  29  * Reachability matrix between endpoints of a given pair of hosts
  30  *
  31  * The output of the reachable() call is a opal_reachable_t, which
  32  * gives an matrix of the connectivity between local and remote
  33  * ethernet endpoints.  Any given value in weights is the connectivity
  34  * between the local endpoint index (first index) and the remote
  35  * endpoint index (second index), and is a value between 0 and INT_MAX
  36  * representing a relative connectivity.
  37  */
  38 struct opal_reachable_t {
  39     opal_object_t super;
  40     /** number of local interfaces passed to reachable() */
  41     int num_local;
  42     /** number of remote interfaces passed to reachable() */
  43     int num_remote;
  44     /** matric of connectivity weights */
  45     int **weights;
  46     /** \internal */
  47     void *memory;
  48 };
  49 typedef struct opal_reachable_t opal_reachable_t;
  50 OBJ_CLASS_DECLARATION(opal_reachable_t);
  51 
  52 /* Init */
  53 typedef int (*opal_reachable_base_module_init_fn_t)(void);
  54 
  55 /* Finalize */
  56 typedef int (*opal_reachable_base_module_fini_fn_t)(void);
  57 
  58 /* Build reachability matrix between local and remote ethernet
  59  * interfaces
  60  *
  61  * Given a list of local interfaces and remote interfaces from a
  62  * single peer, build a reachability matrix between the two peers.
  63  * This function does not select the best pairing of local and remote
  64  * interfaces, but only a (comparable) reachability between any pair
  65  * of local/remote interfaces.
  66  *
  67  * @returns a reachable object containing the reachability matrix on
  68  * success, NULL on failure.
  69  */
  70 typedef opal_reachable_t*
  71 (*opal_reachable_base_module_reachable_fn_t)(opal_list_t *local_if,
  72                                              opal_list_t *remote_if);
  73 
  74 
  75 /*
  76  * the standard public API data structure
  77  */
  78 typedef struct {
  79     /* currently used APIs */
  80     opal_reachable_base_module_init_fn_t                   init;
  81     opal_reachable_base_module_fini_fn_t                   finalize;
  82     opal_reachable_base_module_reachable_fn_t              reachable;
  83 } opal_reachable_base_module_t;
  84 
  85 typedef struct {
  86     mca_base_component_t                      base_version;
  87     mca_base_component_data_t                 base_data;
  88     int priority;
  89 } opal_reachable_base_component_t;
  90 
  91 /*
  92  * Macro for use in components that are of type reachable
  93  */
  94 #define OPAL_REACHABLE_BASE_VERSION_2_0_0             \
  95     OPAL_MCA_BASE_VERSION_2_1_0("reachable", 2, 0, 0)
  96 
  97 /* Global structure for accessing reachability functions */
  98 OPAL_DECLSPEC extern opal_reachable_base_module_t opal_reachable;
  99 
 100 
 101 END_C_DECLS
 102 
 103 #endif

/* [<][>][^][v][top][bottom][index][help] */