sigar 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +201 -0
- data/NOTICE +117 -0
- data/Rakefile +2 -2
- data/bindings/SigarBuild.pm +8 -17
- data/bindings/ruby/Makefile +187 -0
- data/bindings/ruby/darwin_sigar.c +3711 -0
- data/bindings/ruby/darwin_sigar.o +0 -0
- data/bindings/ruby/extconf.rb +20 -17
- data/bindings/ruby/rbsigar.o +0 -0
- data/bindings/ruby/rbsigar_generated.rx +2830 -0
- data/bindings/ruby/sigar.bundle +0 -0
- data/bindings/ruby/sigar.c +2428 -0
- data/bindings/ruby/sigar.o +0 -0
- data/bindings/ruby/sigar_cache.c +179 -0
- data/bindings/ruby/sigar_cache.o +0 -0
- data/bindings/ruby/sigar_fileinfo.c +815 -0
- data/bindings/ruby/sigar_fileinfo.o +0 -0
- data/bindings/ruby/sigar_format.c +696 -0
- data/bindings/ruby/sigar_format.o +0 -0
- data/bindings/ruby/sigar_getline.c +1849 -0
- data/bindings/ruby/sigar_getline.o +0 -0
- data/bindings/ruby/sigar_ptql.c +1967 -0
- data/bindings/ruby/sigar_ptql.o +0 -0
- data/bindings/ruby/sigar_signal.c +216 -0
- data/bindings/ruby/sigar_signal.o +0 -0
- data/bindings/ruby/sigar_util.c +1060 -0
- data/bindings/ruby/sigar_util.o +0 -0
- data/bindings/ruby/sigar_version.c +22 -0
- data/bindings/ruby/sigar_version.o +0 -0
- data/bindings/ruby/test/file_system_test.rb +1 -1
- data/include/sigar.h +8 -4
- data/include/sigar_private.h +1 -1
- data/src/os/darwin/darwin_sigar.c +4 -2
- data/src/os/win32/sigar_os.h +32 -9
- data/src/os/win32/win32_sigar.c +108 -27
- data/src/sigar.c +1 -1
- data/src/sigar_format.c +1 -1
- data/version.properties +1 -1
- metadata +46 -41
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include "sigar.h"
|
|
2
|
+
|
|
3
|
+
static sigar_version_t sigar_version = {
|
|
4
|
+
"03/26/2012 12:16 PM",
|
|
5
|
+
"6e30384",
|
|
6
|
+
"1.7.0.0",
|
|
7
|
+
"x86_64-darwin10.8.0",
|
|
8
|
+
"sigar.bundle",
|
|
9
|
+
"sigar.bundle",
|
|
10
|
+
"SIGAR-1.7.0.0, "
|
|
11
|
+
"SCM revision 6e30384, "
|
|
12
|
+
"built 03/26/2012 12:16 PM as sigar.bundle",
|
|
13
|
+
1,
|
|
14
|
+
7,
|
|
15
|
+
0,
|
|
16
|
+
0
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
SIGAR_DECLARE(sigar_version_t *) sigar_version_get(void)
|
|
20
|
+
{
|
|
21
|
+
return &sigar_version;
|
|
22
|
+
}
|
|
Binary file
|
data/include/sigar.h
CHANGED
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
|
|
24
24
|
#include <limits.h>
|
|
25
25
|
|
|
26
|
+
#ifndef MAX_INTERFACE_NAME_LEN
|
|
27
|
+
#define MAX_INTERFACE_NAME_LEN 256
|
|
28
|
+
#endif
|
|
29
|
+
|
|
26
30
|
#ifdef __cplusplus
|
|
27
31
|
extern "C" {
|
|
28
32
|
#endif
|
|
@@ -529,7 +533,7 @@ typedef struct {
|
|
|
529
533
|
|
|
530
534
|
typedef struct {
|
|
531
535
|
char default_gateway[SIGAR_INET6_ADDRSTRLEN];
|
|
532
|
-
char default_gateway_interface[
|
|
536
|
+
char default_gateway_interface[MAX_INTERFACE_NAME_LEN];
|
|
533
537
|
char host_name[SIGAR_MAXHOSTNAMELEN];
|
|
534
538
|
char domain_name[SIGAR_MAXDOMAINNAMELEN];
|
|
535
539
|
char primary_dns[SIGAR_INET6_ADDRSTRLEN];
|
|
@@ -556,7 +560,7 @@ typedef struct {
|
|
|
556
560
|
mtu,
|
|
557
561
|
window,
|
|
558
562
|
irtt;
|
|
559
|
-
char ifname[
|
|
563
|
+
char ifname[MAX_INTERFACE_NAME_LEN];
|
|
560
564
|
} sigar_net_route_t;
|
|
561
565
|
|
|
562
566
|
typedef struct {
|
|
@@ -602,7 +606,7 @@ SIGAR_DECLARE(int) sigar_net_route_list_destroy(sigar_t *sigar,
|
|
|
602
606
|
#define SIGAR_IPV6_ADDR_COMPATv4 0x0080
|
|
603
607
|
|
|
604
608
|
typedef struct {
|
|
605
|
-
char name[
|
|
609
|
+
char name[MAX_INTERFACE_NAME_LEN];
|
|
606
610
|
char type[64];
|
|
607
611
|
char description[256];
|
|
608
612
|
sigar_net_address_t hwaddr;
|
|
@@ -847,7 +851,7 @@ sigar_net_listen_address_get(sigar_t *sigar,
|
|
|
847
851
|
sigar_net_address_t *address);
|
|
848
852
|
|
|
849
853
|
typedef struct {
|
|
850
|
-
char ifname[
|
|
854
|
+
char ifname[MAX_INTERFACE_NAME_LEN];
|
|
851
855
|
char type[64];
|
|
852
856
|
sigar_net_address_t hwaddr;
|
|
853
857
|
sigar_net_address_t address;
|
data/include/sigar_private.h
CHANGED
|
@@ -50,8 +50,7 @@
|
|
|
50
50
|
#endif
|
|
51
51
|
#include <mach-o/dyld.h>
|
|
52
52
|
#define __OPENTRANSPORTPROVIDERS__
|
|
53
|
-
#include <
|
|
54
|
-
#include <CFString.h>
|
|
53
|
+
#include <CoreServices/CoreServices.h>
|
|
55
54
|
#include <CoreFoundation/CoreFoundation.h>
|
|
56
55
|
#include <IOKit/IOBSD.h>
|
|
57
56
|
#include <IOKit/IOKitLib.h>
|
|
@@ -3661,6 +3660,9 @@ int sigar_os_sys_info_get(sigar_t *sigar,
|
|
|
3661
3660
|
case 6:
|
|
3662
3661
|
codename = "Snow Leopard";
|
|
3663
3662
|
break;
|
|
3663
|
+
case 7:
|
|
3664
|
+
codename = "Lion";
|
|
3665
|
+
break;
|
|
3664
3666
|
default:
|
|
3665
3667
|
codename = "Unknown";
|
|
3666
3668
|
break;
|
data/src/os/win32/sigar_os.h
CHANGED
|
@@ -19,11 +19,24 @@
|
|
|
19
19
|
#ifndef SIGAR_OS_H
|
|
20
20
|
#define SIGAR_OS_H
|
|
21
21
|
|
|
22
|
+
#if !defined(MSVC) && defined(_MSC_VER)
|
|
23
|
+
#define MSVC
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
#ifdef MSVC
|
|
27
|
+
#define WIN32_LEAN_AND_MEAN
|
|
28
|
+
#define snprintf _snprintf
|
|
22
29
|
#if _MSC_VER <= 1200
|
|
23
30
|
#define SIGAR_USING_MSC6 /* Visual Studio version 6 */
|
|
31
|
+
#define HAVE_MIB_IPADDRROW_WTYPE 0
|
|
32
|
+
#else
|
|
33
|
+
#define HAVE_MIB_IPADDRROW_WTYPE 1
|
|
34
|
+
#endif
|
|
35
|
+
#else
|
|
36
|
+
/* Cross compiling */
|
|
37
|
+
#define _WIN32_WINNT 0x0501
|
|
24
38
|
#endif
|
|
25
39
|
|
|
26
|
-
#define WIN32_LEAN_AND_MEAN
|
|
27
40
|
#include <windows.h>
|
|
28
41
|
#include <winreg.h>
|
|
29
42
|
#include <winperf.h>
|
|
@@ -38,12 +51,27 @@
|
|
|
38
51
|
|
|
39
52
|
#include "sigar_util.h"
|
|
40
53
|
|
|
41
|
-
#
|
|
54
|
+
#ifdef MSVC
|
|
55
|
+
# define INT64_C(val) val##i64
|
|
56
|
+
# define SIGAR_DLLFUNC(api, name) \
|
|
57
|
+
struct { \
|
|
58
|
+
const char *name; \
|
|
59
|
+
##api##_##name func; \
|
|
60
|
+
} ##name
|
|
61
|
+
#else
|
|
62
|
+
/* The GCC compiler doesn't require/accept the ## prefix */
|
|
63
|
+
# define INT64_C(val) val##L
|
|
64
|
+
# define SIGAR_DLLFUNC(api, name) \
|
|
65
|
+
struct { \
|
|
66
|
+
const char *name; \
|
|
67
|
+
api##_##name func; \
|
|
68
|
+
} name
|
|
69
|
+
#endif
|
|
42
70
|
|
|
43
71
|
/* see apr/include/arch/win32/atime.h */
|
|
44
72
|
#define EPOCH_DELTA INT64_C(11644473600000000)
|
|
45
73
|
|
|
46
|
-
#define SIGAR_CMDLINE_MAX 4096
|
|
74
|
+
#define SIGAR_CMDLINE_MAX 4096<<2
|
|
47
75
|
|
|
48
76
|
/* XXX: support CP_UTF8 ? */
|
|
49
77
|
|
|
@@ -457,12 +485,6 @@ typedef BOOL (CALLBACK *mpr_get_net_connection)(LPCTSTR,
|
|
|
457
485
|
LPTSTR,
|
|
458
486
|
LPDWORD);
|
|
459
487
|
|
|
460
|
-
#define SIGAR_DLLFUNC(api, name) \
|
|
461
|
-
struct { \
|
|
462
|
-
const char *name; \
|
|
463
|
-
##api##_##name func; \
|
|
464
|
-
} ##name
|
|
465
|
-
|
|
466
488
|
typedef struct {
|
|
467
489
|
sigar_dll_handle_t handle;
|
|
468
490
|
|
|
@@ -567,6 +589,7 @@ struct sigar_t {
|
|
|
567
589
|
sigar_cache_t *netif_mib_rows;
|
|
568
590
|
sigar_cache_t *netif_addr_rows;
|
|
569
591
|
sigar_cache_t *netif_names; /* dwIndex -> net_interface_config.name */
|
|
592
|
+
int netif_name_short;
|
|
570
593
|
|
|
571
594
|
WORD ws_version;
|
|
572
595
|
int ws_error;
|
data/src/os/win32/win32_sigar.c
CHANGED
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
#include "sigar_util.h"
|
|
24
24
|
#include "sigar_format.h"
|
|
25
25
|
#include <shellapi.h>
|
|
26
|
+
#ifndef MSVC
|
|
27
|
+
#include <iphlpapi.h>
|
|
28
|
+
#endif
|
|
26
29
|
|
|
27
30
|
#define USING_WIDE_S(s) (s)->using_wide
|
|
28
31
|
#define USING_WIDE() USING_WIDE_S(sigar)
|
|
@@ -124,6 +127,9 @@ typedef enum {
|
|
|
124
127
|
#define MS_LOOPBACK_ADAPTER "Microsoft Loopback Adapter"
|
|
125
128
|
#define NETIF_LA "la"
|
|
126
129
|
|
|
130
|
+
static int get_proc_info(sigar_t *sigar, sigar_pid_t pid);
|
|
131
|
+
static int netif_hash(char *s);
|
|
132
|
+
|
|
127
133
|
sigar_uint64_t sigar_FileTimeToTime(FILETIME *ft)
|
|
128
134
|
{
|
|
129
135
|
sigar_uint64_t time;
|
|
@@ -375,13 +381,13 @@ static sigar_mpr_t sigar_mpr = {
|
|
|
375
381
|
};
|
|
376
382
|
|
|
377
383
|
#define DLLMOD_COPY(name) \
|
|
378
|
-
memcpy(&(sigar
|
|
384
|
+
memcpy(&(sigar->name), &sigar_##name, sizeof(sigar_##name))
|
|
379
385
|
|
|
380
386
|
#define DLLMOD_INIT(name, all) \
|
|
381
|
-
sigar_dllmod_init(sigar, (sigar_dll_module_t *)&(sigar
|
|
387
|
+
sigar_dllmod_init(sigar, (sigar_dll_module_t *)&(sigar->name), all)
|
|
382
388
|
|
|
383
389
|
#define DLLMOD_FREE(name) \
|
|
384
|
-
sigar_dllmod_free((sigar_dll_module_t *)&(sigar
|
|
390
|
+
sigar_dllmod_free((sigar_dll_module_t *)&(sigar->name))
|
|
385
391
|
|
|
386
392
|
static void sigar_dllmod_free(sigar_dll_module_t *module)
|
|
387
393
|
{
|
|
@@ -507,6 +513,19 @@ static int sigar_enable_privilege(char *name)
|
|
|
507
513
|
return status;
|
|
508
514
|
}
|
|
509
515
|
|
|
516
|
+
static int netif_name_short(void)
|
|
517
|
+
{
|
|
518
|
+
char value[32767]; /* max size from msdn docs */
|
|
519
|
+
DWORD retval =
|
|
520
|
+
GetEnvironmentVariable("SIGAR_NETIF_NAME_SHORT", value, sizeof(value));
|
|
521
|
+
if ((retval > 0) && (strEQ(value, "1") || (strEQ(value, "true")))) {
|
|
522
|
+
return 1;
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
return 0;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
510
529
|
int sigar_os_open(sigar_t **sigar_ptr)
|
|
511
530
|
{
|
|
512
531
|
LONG result;
|
|
@@ -567,6 +586,8 @@ int sigar_os_open(sigar_t **sigar_ptr)
|
|
|
567
586
|
sigar->netif_addr_rows = NULL;
|
|
568
587
|
sigar->netif_adapters = NULL;
|
|
569
588
|
sigar->netif_names = NULL;
|
|
589
|
+
sigar->netif_name_short = netif_name_short();
|
|
590
|
+
|
|
570
591
|
sigar->pinfo.pid = -1;
|
|
571
592
|
sigar->ws_version = 0;
|
|
572
593
|
sigar->lcpu = -1;
|
|
@@ -1470,7 +1491,9 @@ static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
|
|
|
1470
1491
|
}
|
|
1471
1492
|
|
|
1472
1493
|
/* likely we are 32-bit, pid process is 64-bit */
|
|
1494
|
+
#ifdef MSVC
|
|
1473
1495
|
status = sigar_proc_args_wmi_get(sigar, pid, procargs);
|
|
1496
|
+
#endif
|
|
1474
1497
|
if (status == ERROR_NOT_FOUND) {
|
|
1475
1498
|
status = SIGAR_NO_SUCH_PROCESS;
|
|
1476
1499
|
}
|
|
@@ -1507,7 +1530,7 @@ static int sigar_proc_env_parse(UCHAR *ptr, sigar_proc_env_t *procenv,
|
|
|
1507
1530
|
break; /*XXX*/
|
|
1508
1531
|
}
|
|
1509
1532
|
|
|
1510
|
-
klen = val - ptr;
|
|
1533
|
+
klen = val - (char*)ptr;
|
|
1511
1534
|
SIGAR_SSTRCPY(key, ptr);
|
|
1512
1535
|
key[klen] = '\0';
|
|
1513
1536
|
++val;
|
|
@@ -1640,6 +1663,7 @@ SIGAR_DECLARE(int) sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid,
|
|
|
1640
1663
|
}
|
|
1641
1664
|
|
|
1642
1665
|
status = sigar_proc_exe_peb_get(sigar, proc, procexe);
|
|
1666
|
+
#ifdef MSVC
|
|
1643
1667
|
if (procexe->name[0] == '\0') {
|
|
1644
1668
|
/* likely we are 32-bit, pid process is 64-bit */
|
|
1645
1669
|
/* procexe->cwd[0] = XXX where else can we try? */
|
|
@@ -1648,7 +1672,7 @@ SIGAR_DECLARE(int) sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid,
|
|
|
1648
1672
|
status = SIGAR_NO_SUCH_PROCESS;
|
|
1649
1673
|
}
|
|
1650
1674
|
}
|
|
1651
|
-
|
|
1675
|
+
#endif
|
|
1652
1676
|
if (procexe->cwd[0] != '\0') {
|
|
1653
1677
|
/* strip trailing '\' */
|
|
1654
1678
|
int len = strlen(procexe->cwd);
|
|
@@ -2279,9 +2303,9 @@ static int sigar_get_adapter_info(sigar_t *sigar,
|
|
|
2279
2303
|
|
|
2280
2304
|
static int sigar_get_adapters_addresses(sigar_t *sigar,
|
|
2281
2305
|
ULONG family, ULONG flags,
|
|
2282
|
-
PIP_ADAPTER_ADDRESSES *addrs
|
|
2306
|
+
PIP_ADAPTER_ADDRESSES *addrs,
|
|
2307
|
+
ULONG *size)
|
|
2283
2308
|
{
|
|
2284
|
-
ULONG size = sigar->ifconf_len;
|
|
2285
2309
|
ULONG rc;
|
|
2286
2310
|
|
|
2287
2311
|
DLLMOD_INIT(iphlpapi, FALSE);
|
|
@@ -2290,28 +2314,23 @@ static int sigar_get_adapters_addresses(sigar_t *sigar,
|
|
|
2290
2314
|
return SIGAR_ENOTIMPL;
|
|
2291
2315
|
}
|
|
2292
2316
|
|
|
2293
|
-
*addrs = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf;
|
|
2294
2317
|
rc = sigar_GetAdaptersAddresses(family,
|
|
2295
2318
|
flags,
|
|
2296
2319
|
NULL,
|
|
2297
2320
|
*addrs,
|
|
2298
|
-
|
|
2321
|
+
size);
|
|
2299
2322
|
|
|
2300
2323
|
if (rc == ERROR_BUFFER_OVERFLOW) {
|
|
2301
2324
|
sigar_log_printf(sigar, SIGAR_LOG_DEBUG,
|
|
2302
|
-
"GetAdaptersAddresses "
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
sigar->ifconf_len = size;
|
|
2306
|
-
sigar->ifconf_buf = realloc(sigar->ifconf_buf,
|
|
2307
|
-
sigar->ifconf_len);
|
|
2325
|
+
"GetAdaptersAddresses realloc to %d", size);
|
|
2326
|
+
|
|
2327
|
+
*addrs = realloc(*addrs, *size);
|
|
2308
2328
|
|
|
2309
|
-
*addrs = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf;
|
|
2310
2329
|
rc = sigar_GetAdaptersAddresses(family,
|
|
2311
2330
|
flags,
|
|
2312
2331
|
NULL,
|
|
2313
|
-
*addrs,
|
|
2314
|
-
|
|
2332
|
+
(PIP_ADAPTER_ADDRESSES)*addrs,
|
|
2333
|
+
size);
|
|
2315
2334
|
}
|
|
2316
2335
|
|
|
2317
2336
|
if (rc != ERROR_SUCCESS) {
|
|
@@ -2394,10 +2413,10 @@ static int sigar_get_netif_ipaddr(sigar_t *sigar,
|
|
|
2394
2413
|
MIB_IPADDRROW *row = &mib->table[i];
|
|
2395
2414
|
short type;
|
|
2396
2415
|
|
|
2397
|
-
#
|
|
2398
|
-
type = row->unused2;
|
|
2399
|
-
#else
|
|
2416
|
+
#if HAVE_MIB_IPADDRROW_WTYPE
|
|
2400
2417
|
type = row->wType;
|
|
2418
|
+
#else
|
|
2419
|
+
type = row->unused2;
|
|
2401
2420
|
#endif
|
|
2402
2421
|
if (!(type & MIB_IPADDR_PRIMARY)) {
|
|
2403
2422
|
continue;
|
|
@@ -2651,6 +2670,33 @@ static int netif_hash(char *s)
|
|
|
2651
2670
|
#define IF_TYPE_IEEE80211 71
|
|
2652
2671
|
#endif
|
|
2653
2672
|
|
|
2673
|
+
static int
|
|
2674
|
+
sigar_net_interface_name_get(sigar_t *sigar, MIB_IFROW *ifr, PIP_ADAPTER_ADDRESSES address_list, char *name)
|
|
2675
|
+
{
|
|
2676
|
+
PIP_ADAPTER_ADDRESSES iter;
|
|
2677
|
+
int lpc = 0;
|
|
2678
|
+
|
|
2679
|
+
if (address_list == NULL) {
|
|
2680
|
+
return SIGAR_ENOTIMPL;
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
for (iter = address_list; iter != NULL; iter = iter->Next) {
|
|
2684
|
+
for (lpc = 0; lpc < iter->PhysicalAddressLength; lpc++) {
|
|
2685
|
+
if (iter->PhysicalAddress[lpc] != ifr->bPhysAddr[lpc]) {
|
|
2686
|
+
break;
|
|
2687
|
+
}
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2690
|
+
if (lpc == iter->PhysicalAddressLength) {
|
|
2691
|
+
wcstombs(name, iter->FriendlyName, MAX_INTERFACE_NAME_LEN);
|
|
2692
|
+
name[MAX_INTERFACE_NAME_LEN-1] = '\0';
|
|
2693
|
+
return SIGAR_OK;
|
|
2694
|
+
}
|
|
2695
|
+
}
|
|
2696
|
+
|
|
2697
|
+
return SIGAR_ENOENT;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2654
2700
|
SIGAR_DECLARE(int)
|
|
2655
2701
|
sigar_net_interface_list_get(sigar_t *sigar,
|
|
2656
2702
|
sigar_net_interface_list_t *iflist)
|
|
@@ -2658,6 +2704,14 @@ sigar_net_interface_list_get(sigar_t *sigar,
|
|
|
2658
2704
|
MIB_IFTABLE *ift;
|
|
2659
2705
|
int i, status;
|
|
2660
2706
|
int lo=0, eth=0, la=0;
|
|
2707
|
+
PIP_ADAPTER_ADDRESSES address_list = NULL;
|
|
2708
|
+
ULONG size = 0;
|
|
2709
|
+
|
|
2710
|
+
status = sigar_get_adapters_addresses(sigar, AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, &address_list, &size);
|
|
2711
|
+
|
|
2712
|
+
if (status != SIGAR_OK) {
|
|
2713
|
+
address_list = NULL;
|
|
2714
|
+
}
|
|
2661
2715
|
|
|
2662
2716
|
if (!sigar->netif_mib_rows) {
|
|
2663
2717
|
sigar->netif_mib_rows =
|
|
@@ -2670,6 +2724,9 @@ sigar_net_interface_list_get(sigar_t *sigar,
|
|
|
2670
2724
|
}
|
|
2671
2725
|
|
|
2672
2726
|
if ((status = sigar_get_if_table(sigar, &ift)) != SIGAR_OK) {
|
|
2727
|
+
if (address_list) {
|
|
2728
|
+
free(address_list);
|
|
2729
|
+
}
|
|
2673
2730
|
return status;
|
|
2674
2731
|
}
|
|
2675
2732
|
|
|
@@ -2681,22 +2738,43 @@ sigar_net_interface_list_get(sigar_t *sigar,
|
|
|
2681
2738
|
}
|
|
2682
2739
|
|
|
2683
2740
|
for (i=0; i<ift->dwNumEntries; i++) {
|
|
2684
|
-
char name[
|
|
2741
|
+
char name[MAX_INTERFACE_NAME_LEN];
|
|
2685
2742
|
int key;
|
|
2686
2743
|
MIB_IFROW *ifr = ift->table + i;
|
|
2687
2744
|
sigar_cache_entry_t *entry;
|
|
2688
2745
|
|
|
2746
|
+
status = SIGAR_ENOENT;
|
|
2747
|
+
|
|
2689
2748
|
if (strEQ(ifr->bDescr, MS_LOOPBACK_ADAPTER)) {
|
|
2690
2749
|
/* special-case */
|
|
2691
2750
|
sprintf(name, NETIF_LA "%d", la++);
|
|
2692
2751
|
}
|
|
2693
2752
|
else if (ifr->dwType == MIB_IF_TYPE_LOOPBACK) {
|
|
2694
|
-
|
|
2753
|
+
if (!sigar->netif_name_short) {
|
|
2754
|
+
status = sigar_net_interface_name_get(sigar, ifr, address_list, name);
|
|
2755
|
+
}
|
|
2756
|
+
if (status != SIGAR_OK) {
|
|
2757
|
+
sprintf(name, "lo%d", lo++);
|
|
2758
|
+
}
|
|
2695
2759
|
}
|
|
2696
2760
|
else if ((ifr->dwType == MIB_IF_TYPE_ETHERNET) ||
|
|
2697
2761
|
(ifr->dwType == IF_TYPE_IEEE80211))
|
|
2698
2762
|
{
|
|
2699
|
-
|
|
2763
|
+
if (!sigar->netif_name_short &&
|
|
2764
|
+
(strstr(ifr->bDescr, "Scheduler") == NULL) &&
|
|
2765
|
+
(strstr(ifr->bDescr, "Filter") == NULL))
|
|
2766
|
+
{
|
|
2767
|
+
status = sigar_net_interface_name_get(sigar, ifr, address_list, name);
|
|
2768
|
+
}
|
|
2769
|
+
|
|
2770
|
+
if (status != SIGAR_OK) {
|
|
2771
|
+
if (sigar->netif_name_short) {
|
|
2772
|
+
sprintf(name, "eth%d", eth++);
|
|
2773
|
+
}
|
|
2774
|
+
else {
|
|
2775
|
+
snprintf(name, ifr->dwDescrLen, "%s", ifr->bDescr);
|
|
2776
|
+
}
|
|
2777
|
+
}
|
|
2700
2778
|
}
|
|
2701
2779
|
else {
|
|
2702
2780
|
continue; /*XXX*/
|
|
@@ -2720,6 +2798,10 @@ sigar_net_interface_list_get(sigar_t *sigar,
|
|
|
2720
2798
|
}
|
|
2721
2799
|
}
|
|
2722
2800
|
|
|
2801
|
+
if (address_list != NULL) {
|
|
2802
|
+
free(address_list);
|
|
2803
|
+
}
|
|
2804
|
+
|
|
2723
2805
|
return SIGAR_OK;
|
|
2724
2806
|
}
|
|
2725
2807
|
|
|
@@ -2730,10 +2812,9 @@ static int sigar_net_interface_ipv6_config_find(sigar_t *sigar, int index,
|
|
|
2730
2812
|
return SIGAR_ENOTIMPL;
|
|
2731
2813
|
#else
|
|
2732
2814
|
int status;
|
|
2733
|
-
PIP_ADAPTER_ADDRESSES aa, addrs;
|
|
2815
|
+
PIP_ADAPTER_ADDRESSES aa = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf, addrs;
|
|
2734
2816
|
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
|
|
2735
|
-
|
|
2736
|
-
status = sigar_get_adapters_addresses(sigar, AF_UNSPEC, flags, &aa);
|
|
2817
|
+
status = sigar_get_adapters_addresses(sigar, AF_UNSPEC, flags, &aa, &sigar->ifconf_len);
|
|
2737
2818
|
|
|
2738
2819
|
if (status != SIGAR_OK) {
|
|
2739
2820
|
return status;
|