1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| bool hasGlobalIPv6(const char *interfaceName) { FILE *f = nullptr; if ((f = fopen("/proc/net/if_inet6", "r")) != nullptr) { char addr6[40], devname[21]; int plen, scope, dad_status, if_idx; char addr6p[8][5]; bool found = false;
while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
if (scope == 0 && strcmp(interfaceName, devname) == 0) { found = true; break; } }
fclose(f); return found; }
return false; }
|