This source file includes following definitions.
- build_if_list
- main
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 #include "opal_config.h"
  14 
  15 #include "reachable_shared.h"
  16 
  17 #include "opal/runtime/opal.h"
  18 #include "opal/mca/reachable/reachable.h"
  19 #include "opal/util/if.h"
  20 #include "opal/class/opal_list.h"
  21 #include "opal/util/if.h"
  22 
  23 
  24 
  25 
  26 
  27 opal_list_t* build_if_list(void)
  28 {
  29     
  30     opal_list_t *if_list = OBJ_NEW(opal_list_t);
  31     opal_if_t *intf;
  32 
  33     
  34 
  35 
  36     intf = create_if(AF_INET, "127.0.0.1", 8, 0);
  37     opal_list_append(if_list, &(intf->super));
  38 
  39     
  40 
  41 
  42     intf = create_if(AF_INET, "127.31.41.59", 8, 0);
  43     opal_list_append(if_list, &(intf->super));
  44 
  45     
  46 
  47 
  48     intf = create_if(AF_INET, "127.26.53.58", 8, 0);
  49     opal_list_append(if_list, &(intf->super));
  50 
  51     
  52 
  53 
  54     intf = create_if(AF_INET, "8.8.8.8", 16, 0);
  55     opal_list_append(if_list, &(intf->super));
  56 
  57     
  58 
  59 
  60     intf = create_if(AF_INET, "8.8.4.4", 16, 0);
  61     opal_list_append(if_list, &(intf->super));
  62 
  63     
  64 
  65 
  66     intf = create_if(AF_INET6, "2001:4860:4860::8888", 64, 0);
  67     opal_list_append(if_list, &(intf->super));
  68 
  69     
  70 
  71 
  72     intf = create_if(AF_INET6, "2001:4860:4860::8844", 128, 0);
  73     opal_list_append(if_list, &(intf->super));
  74 
  75     
  76 
  77 
  78     intf = create_if(AF_INET6, "2001:4860:4860:0:0:0:0:8888", 64, 0);
  79     opal_list_append(if_list, &(intf->super));
  80 
  81     
  82 
  83 
  84     intf = create_if(AF_INET6, "2001:4860:4860:0:0:0:0:8844", 64, 0);
  85     opal_list_append(if_list, &(intf->super));
  86 
  87     
  88 
  89 
  90     intf = create_if(AF_INET6, "fe80::0001", 64, 0);
  91     opal_list_append(if_list, &(intf->super));
  92 
  93     return if_list;
  94 }
  95 
  96 
  97 int main(int argc, char **argv)
  98 {
  99     opal_list_t *local_list, *remote_list;
 100     opal_reachable_t *results;
 101     uint32_t i, j;
 102     int successful_connections = 0;
 103     int local_ifs;
 104     int remote_ifs;
 105     opal_if_t *local_if;
 106 
 107     opal_init(&argc, &argv);
 108 
 109     
 110     local_list = &opal_if_list;
 111     
 112     remote_list = build_if_list();
 113 
 114     local_ifs = opal_list_get_size(local_list);
 115     remote_ifs = opal_list_get_size(remote_list);
 116 
 117     
 118 
 119 
 120     results = opal_reachable.reachable(local_list, remote_list);
 121 
 122     printf("Local interfaces:\n");
 123     i = 0;
 124     OPAL_LIST_FOREACH(local_if, local_list, opal_if_t) {
 125         char addr[128];
 126         char *family;
 127 
 128         switch (local_if->af_family) {
 129             case AF_INET:
 130                 family = "IPv4";
 131                 inet_ntop(AF_INET, &(((struct sockaddr_in*) &local_if->if_addr))->sin_addr,
 132                           addr, sizeof(addr));
 133                 break;
 134             case AF_INET6:
 135                 family = "IPv6";
 136                 inet_ntop(AF_INET6, &(((struct sockaddr_in6*) &local_if->if_addr))->sin6_addr,
 137                           addr, sizeof(addr));
 138                 break;
 139             default:
 140                 family = "Unknown";
 141                 opal_string_copy(addr, "Unknown", sizeof(addr));
 142                 break;
 143         }
 144 
 145         printf("  %3d: %s\t%s\t%s/%d\n", i, local_if->if_name,
 146                family, addr, local_if->if_mask);
 147         i++;
 148     }
 149 
 150     printf("\nRemote interfaces:\n");
 151     i = 0;
 152     OPAL_LIST_FOREACH(local_if, remote_list, opal_if_t) {
 153         char addr[128];
 154         char *family;
 155 
 156         switch (local_if->af_family) {
 157             case AF_INET:
 158                 family = "IPv4";
 159                 inet_ntop(AF_INET, &(((struct sockaddr_in*) &local_if->if_addr))->sin_addr,
 160                           addr, sizeof(addr));
 161                 break;
 162             case AF_INET6:
 163                 family = "IPv6";
 164                 inet_ntop(AF_INET6, &(((struct sockaddr_in6*) &local_if->if_addr))->sin6_addr,
 165                           addr, sizeof(addr));
 166                 break;
 167             default:
 168                 family = "Unknown";
 169                 opal_string_copy(addr, "Unknown", sizeof(addr));
 170                 break;
 171         }
 172 
 173         printf("  %3d: %s\t%s\t%s/%d\n", i, local_if->if_name,
 174                family, addr, local_if->if_mask);
 175         i++;
 176     }
 177 
 178     printf("\nConnectivity Table:\n       ");
 179     for (j = 0 ; j < remote_ifs ; j++) {
 180         printf("%3d ", j);
 181     }
 182     printf("\n");
 183 
 184     for (i = 0; i < local_ifs ; i++) {
 185         printf("  %3d: ", i);
 186         for (j = 0 ; j < remote_ifs ; j++) {
 187             printf("%3d ", results->weights[i][j]);
 188         }
 189         printf("\n");
 190     }
 191     printf("\n");
 192 
 193     OBJ_RELEASE(remote_list);
 194 
 195     opal_output(0, "Passed all tests!\n");
 196     return 0;
 197 }