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;
}
Esempio n. 2
0
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;
    }
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
int lua_sigar_netifs_get(lua_State *L) {
	sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar");
	lua_sigar_netifs_t *netifs;

	netifs = lua_newuserdata(L, sizeof(lua_sigar_netifs_t));
	netifs->sigar = s;
	sigar_net_interface_list_get(s, &(netifs->netifs));
	netifs->ref_count = 1;
	if (0 != luaL_newmetatable(L, "sigar_netifs")) {
		lua_pushcfunction(L, lua_sigar_netifs_len);
		lua_setfield(L, -2, "__len");
		lua_pushcfunction(L, lua_sigar_netifs_get_netif);
		lua_setfield(L, -2, "__index");
		lua_pushcfunction(L, lua_sigar_netifs_gc);
		lua_setfield(L, -2, "__gc");
	}
	lua_setmetatable(L, -2);

	return 1;
}
Esempio n. 5
0
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);
}