root/orte/test/system/opal_interface.c

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

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /* -*- C -*-
   2  *
   3  * $HEADER$
   4  *
   5  */
   6 #include <stdio.h>
   7 #include <unistd.h>
   8 
   9 #include "opal/class/opal_list.h"
  10 #include "opal/dss/dss.h"
  11 #include "opal/mca/event/event.h"
  12 #include "opal/util/if.h"
  13 #include "opal/runtime/opal.h"
  14 
  15 #include "opal/mca/if/base/base.h"
  16 
  17 int main(int argc, char* argv[])
  18 {
  19     int rc, idx;
  20     uint32_t addr, netmask, netaddr;
  21     struct sockaddr_in inaddr, *paddr;
  22     char **aliases=NULL;
  23     opal_if_t *intf;
  24 
  25     if (0 > (rc = opal_init(&argc, &argv))) {
  26         fprintf(stderr, "opal_interface: couldn't init opal - error code %d\n", rc);
  27         return rc;
  28     }
  29 
  30     if (OPAL_SUCCESS != mca_base_framework_open(&opal_if_base_framework, 0)) {
  31         fprintf(stderr, "opal_interface: couldn't get interfaces\n");
  32         return 1;
  33     }
  34 
  35     for (intf =  (opal_if_t*)opal_list_get_first(&opal_if_list);
  36         intf != (opal_if_t*)opal_list_get_end(&opal_if_list);
  37         intf =  (opal_if_t*)opal_list_get_next(intf)) {
  38         paddr = (struct sockaddr_in*) &intf->if_addr;
  39         fprintf(stderr, "intf: %s AF: %s indx: %d kindx: %d\n", intf->if_name,
  40                 (AF_INET == paddr->sin_family) ? "v4" : "v6",
  41                 intf->if_index, intf->if_kernel_index);
  42     }
  43 
  44     if (2 == argc) {
  45         rc = opal_iftupletoaddr(argv[1], &netaddr, &netmask);
  46 
  47         fprintf(stderr, "netaddr %03d.%03d.%03d.%03d netmask %03d.%03d.%03d.%03d rc %d\n",
  48                 OPAL_IF_FORMAT_ADDR(netaddr), OPAL_IF_FORMAT_ADDR(netmask), rc);
  49 
  50         /* search for a matching interface - take the first one within the returned scope */
  51         idx = opal_ifbegin();
  52         while (0 < idx) {
  53             /* ignore the loopback interface */
  54             if (opal_ifisloopback(idx)) {
  55                 fprintf(stderr, "LOOPBACK IGNORED\n");
  56                 idx = opal_ifnext(idx);
  57                 continue;
  58             }
  59             if (0 != (rc = opal_ifindextoaddr(idx, (struct sockaddr*)&inaddr, sizeof(inaddr)))) {
  60                 break;
  61             }
  62             addr = ntohl(inaddr.sin_addr.s_addr);
  63             fprintf(stderr, "checking netaddr %03d.%03d.%03d.%03d addr %03d.%03d.%03d.%03d netmask %03d.%03d.%03d.%03d rc %d\n",
  64                     OPAL_IF_FORMAT_ADDR(netaddr), OPAL_IF_FORMAT_ADDR(addr), OPAL_IF_FORMAT_ADDR(netmask), rc);
  65             if (netaddr == (addr & netmask)) {
  66                 fprintf(stderr, "MATCH FOUND\n");
  67             }
  68             idx = opal_ifnext(idx);
  69         }
  70     }
  71 
  72     /* check the aliases */
  73     opal_ifgetaliases(&aliases);
  74     idx = 0;
  75     while (NULL != aliases[idx]) {
  76         fprintf(stderr, "alias: %s\n", aliases[idx]);
  77         idx++;
  78     }
  79 
  80     opal_finalize();
  81     return 0;
  82 }

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