This source file includes following definitions.
- main
1
2
3
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
51 idx = opal_ifbegin();
52 while (0 < idx) {
53
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
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 }