static int lua_sigar_netifs_free(lua_State *L, lua_sigar_netifs_t *netifs) { if (--netifs->ref_count == 0) { sigar_net_interface_list_destroy(netifs->sigar, &(netifs->netifs)); } return 0; }
JNIEXPORT jobjectArray SIGAR_JNIx(getNetInterfaceList) (JNIEnv *env, jobject sigar_obj) { int status; unsigned int i; sigar_net_interface_list_t iflist; jobjectArray ifarray; jclass stringclass = JENV->FindClass(env, "java/lang/String"); dSIGAR(NULL); if ((status = sigar_net_interface_list_get(sigar, &iflist)) != SIGAR_OK) { sigar_throw_error(env, jsigar, status); return NULL; } ifarray = JENV->NewObjectArray(env, iflist.number, stringclass, 0); SIGAR_CHEX; for (i=0; i<iflist.number; i++) { jstring s = JENV->NewStringUTF(env, iflist.data[i]); JENV->SetObjectArrayElement(env, ifarray, i, s); SIGAR_CHEX; } sigar_net_interface_list_destroy(sigar, &iflist); return ifarray; }
sigar_net_interface_config_primary_get(sigar_t *sigar, sigar_net_interface_config_t *ifconfig) { int i, status, found=0; sigar_net_interface_list_t iflist; sigar_net_interface_config_t possible_config; possible_config.flags = 0; if ((status = sigar_net_interface_list_get(sigar, &iflist)) != SIGAR_OK) { return status; } for (i=0; i<iflist.number; i++) { status = sigar_net_interface_config_get(sigar, iflist.data[i], ifconfig); if ((status != SIGAR_OK) || (ifconfig->flags & SIGAR_IFF_LOOPBACK) || !ifconfig->hwaddr.addr.in) /* no mac address */ { continue; } if (!possible_config.flags) { /* save for later for use if we're not connected to the net * or all interfaces are aliases (e.g. solaris zone) */ memcpy(&possible_config, ifconfig, sizeof(*ifconfig)); } if (!ifconfig->address.addr.in) { continue; /* no ip address */ } if (strchr(iflist.data[i], ':')) { continue; /* alias */ } found = 1; break; } sigar_net_interface_list_destroy(sigar, &iflist); if (found) { return SIGAR_OK; } else if (possible_config.flags) { memcpy(ifconfig, &possible_config, sizeof(*ifconfig)); return SIGAR_OK; } else { return SIGAR_ENXIO; } }
static VALUE rb_sigar_net_interface_list(VALUE obj) { int status; sigar_t *sigar = rb_sigar_get(obj); sigar_net_interface_list_t iflist; VALUE RETVAL; status = sigar_net_interface_list_get(sigar, &iflist); if (status != SIGAR_OK) { RB_SIGAR_CROAK; } RETVAL = rb_sigar_new_strlist(iflist.data, iflist.number); sigar_net_interface_list_destroy(sigar, &iflist); return RETVAL; }
static void setup_sigar(void) { sigar_file_system_list_t sigar_fslist; sigar_net_interface_list_t sigar_netlist; int i, e, cnt; int do_destroy = 0; /* initialize sigar */ if (0 != (e = sigar_open(&gx.sigar))) { gpsmon_fatalx(FLINE, e, "sigar_open failed"); } TR2(("sigar initialized\n")); do_destroy = 1; if (0 != sigar_net_interface_list_get(gx.sigar, &sigar_netlist)) { memset(&sigar_netlist, 0, sizeof(sigar_netlist)); do_destroy = 0; } gx.netlist = apr_pcalloc(gx.pool, sizeof(const char*) * (1 + sigar_netlist.number)); CHECKMEM(gx.netlist); for (i = 0; i < sigar_netlist.number; i++) { gx.netlist[i] = apr_pstrdup(gx.pool, sigar_netlist.data[i]); CHECKMEM(gx.netlist[i]); TR2(("sigar net %d: %s\n", i, gx.netlist[i])); } if (do_destroy) sigar_net_interface_list_destroy(gx.sigar, &sigar_netlist); do_destroy = 1; if (0 != sigar_file_system_list_get(gx.sigar, &sigar_fslist)) { memset(&sigar_fslist, 0, sizeof(sigar_fslist)); do_destroy = 0; } cnt = 0; TR2(("sigar fsnumber: %d\n", sigar_fslist.number)); for (i = 0; i < sigar_fslist.number; i++) { if (sigar_fslist.data[i].type == SIGAR_FSTYPE_LOCAL_DISK) { TR2(("sigar cnt: %d\n", cnt + 1)); cnt++; } } gx.fslist = apr_pcalloc(gx.pool, sizeof(const char*) * (cnt + 1)); CHECKMEM(gx.fslist); gx.devlist = apr_pcalloc(gx.pool, sizeof(const char*) * (cnt + 1)); CHECKMEM(gx.devlist); cnt = 0; for (i = 0; i < sigar_fslist.number; i++) { if (sigar_fslist.data[i].type == SIGAR_FSTYPE_LOCAL_DISK) { gx.fslist[cnt] = apr_pstrdup(gx.pool, sigar_fslist.data[i].dir_name); CHECKMEM(gx.fslist[cnt]); TR2(("fs: %s\n", gx.fslist[cnt])); gx.devlist[cnt] = apr_pstrdup(gx.pool, sigar_fslist.data[i].dev_name); CHECKMEM(gx.devlist[cnt]); cnt++; } } cnt = 0; for (i = 0; i < sigar_fslist.number; i++) { if (sigar_fslist.data[i].type == SIGAR_FSTYPE_LOCAL_DISK || sigar_fslist.data[i].type == SIGAR_FSTYPE_NETWORK) { TR2(("sigar cnt: %d\n", cnt + 1)); cnt++; } } gx.allfslist = apr_pcalloc(gx.pool, sizeof(const char*) * (cnt + 1)); CHECKMEM(gx.allfslist); cnt = 0; for (i = 0; i < sigar_fslist.number; i++) { if (sigar_fslist.data[i].type == SIGAR_FSTYPE_LOCAL_DISK || sigar_fslist.data[i].type == SIGAR_FSTYPE_NETWORK) { gx.allfslist[cnt] = apr_pstrdup(gx.pool, sigar_fslist.data[i].dir_name); CHECKMEM(gx.allfslist[cnt]); TR2(("allfs: %s\n", gx.allfslist[cnt])); cnt++; } } if (do_destroy) sigar_file_system_list_destroy(gx.sigar, &sigar_fslist); }