Merge branch 'master' into SIGAR-172
This commit is contained in:
commit
7496b795e4
|
@ -71,7 +71,7 @@ sub flags {
|
|||
$os = $1;
|
||||
$is_win32 = 1;
|
||||
@cppflags = ('-DWIN32');
|
||||
@libs = qw(kernel32 user32 advapi32 ws2_32 netapi32 shell32 pdh version);
|
||||
@libs = qw(kernel32 user32 advapi32 ws2_32 netapi32 shell32 pdh version comsupp wbemuuid);
|
||||
}
|
||||
elsif ($os =~ /(linux)/) {
|
||||
$os = $1;
|
||||
|
|
|
@ -462,34 +462,44 @@ use vars qw(%classes %cmds);
|
|||
{
|
||||
name => 'vendor', type => 'String',
|
||||
desc => 'CPU vendor id',
|
||||
plat => 'AFLHSW'
|
||||
plat => '*'
|
||||
},
|
||||
{
|
||||
name => 'model', type => 'String',
|
||||
desc => 'CPU model',
|
||||
plat => 'AFLHSW'
|
||||
plat => '*'
|
||||
},
|
||||
{
|
||||
name => 'mhz', type => 'Int',
|
||||
desc => 'CPU speed',
|
||||
plat => 'AFHLSW'
|
||||
desc => 'Current CPU speed',
|
||||
plat => '*'
|
||||
},
|
||||
{
|
||||
name => 'mhz_max', type => 'Int',
|
||||
desc => 'Maximum CPU speed',
|
||||
plat => 'DL'
|
||||
},
|
||||
{
|
||||
name => 'mhz_min', type => 'Int',
|
||||
desc => 'Maximum CPU speed',
|
||||
plat => 'DL'
|
||||
},
|
||||
{
|
||||
name => 'cache_size', type => 'Long',
|
||||
desc => 'CPU cache size',
|
||||
plat => 'AL'
|
||||
plat => 'ADL'
|
||||
},
|
||||
{
|
||||
name => 'total_cores', type => 'Int',
|
||||
desc => 'Total CPU cores (logical)',
|
||||
name => 'total_cores', type => 'Int',
|
||||
desc => 'Total CPU cores (logical)',
|
||||
},
|
||||
{
|
||||
name => 'total_sockets', type => 'Int',
|
||||
desc => 'Total CPU sockets (physical)',
|
||||
name => 'total_sockets', type => 'Int',
|
||||
desc => 'Total CPU sockets (physical)',
|
||||
},
|
||||
{
|
||||
name => 'cores_per_socket', type => 'Int',
|
||||
desc => 'Number of CPU cores per CPU socket',
|
||||
name => 'cores_per_socket', type => 'Int',
|
||||
desc => 'Number of CPU cores per CPU socket',
|
||||
},
|
||||
],
|
||||
Uptime => [
|
||||
|
@ -1086,6 +1096,11 @@ use vars qw(%classes %cmds);
|
|||
desc => '',
|
||||
plat => 'DFL'
|
||||
},
|
||||
{
|
||||
name => 'tx_queue_len', type => 'Int',
|
||||
desc => '',
|
||||
plat => 'L'
|
||||
},
|
||||
],
|
||||
NetInterfaceStat => [
|
||||
{
|
||||
|
@ -2065,8 +2080,8 @@ EOF
|
|||
my $member = $field->{member} || $name;
|
||||
my $desc = $field->{desc} || $name;
|
||||
(my $jname = $name) =~ s/_(\w)/\u$1/g;
|
||||
my $getter = "get\u$jname";
|
||||
$jname = jname($jname);
|
||||
my $getter = "get\u$jname";
|
||||
$jname = jname($jname);
|
||||
my $sig = qq("$field_types{$type}");
|
||||
my $set = "JENV->Set${type}Field";
|
||||
my $get = "JENV->Get${type}Field";
|
||||
|
|
|
@ -97,6 +97,16 @@ public class NetFlags {
|
|||
|
||||
public final static int IFF_SLAVE = 0x1000;
|
||||
|
||||
/**
|
||||
* Master of a load balancer
|
||||
*/
|
||||
public static final int IFF_MASTER = 0x2000;
|
||||
|
||||
/**
|
||||
* Dialup device with changing addresses
|
||||
*/
|
||||
public static final int IFF_DYNAMIC = 0x4000;
|
||||
|
||||
public static final int RTF_UP = 0x1;
|
||||
|
||||
public static final int RTF_GATEWAY = 0x2;
|
||||
|
|
|
@ -25,7 +25,7 @@ else {
|
|||
my $flags = SigarBuild::flags();
|
||||
my(@inline_src) = SigarBuild::inline_src($flags);
|
||||
push @clean_files, @inline_src;
|
||||
my(@object) = ('Sigar.o', map { s/c$/o/; $_ } @inline_src);
|
||||
my(@object) = ('Sigar.o', map { s/cp{0,2}$/o/; $_ } @inline_src);
|
||||
my(@libs) = map { "-l$_" } @{$flags->{libs}};
|
||||
|
||||
@mm_args = (
|
||||
|
|
|
@ -11,6 +11,8 @@ puts num.to_s + " total CPUs.."
|
|||
infos.each do |info|
|
||||
puts "Vendor........" + info.vendor
|
||||
puts "Model........." + info.model
|
||||
puts "Mhz..........." + info.mhz.to_s
|
||||
puts "Current Mhz..." + info.mhz.to_s
|
||||
puts "Maximum Mhz..." + info.mhz_max.to_s
|
||||
puts "Minimum Mhz..." + info.mhz_min.to_s
|
||||
puts "Cache size...." + info.cache_size.to_s
|
||||
end
|
||||
|
|
|
@ -65,7 +65,8 @@ iflist.each do |ifname|
|
|||
" overruns:" + ifstat.tx_overruns.to_s +
|
||||
" carrier:" + ifstat.tx_carrier.to_s
|
||||
|
||||
puts "\t" + "collisions:" + ifstat.tx_collisions.to_s
|
||||
puts "\t" + "collisions:" + ifstat.tx_collisions.to_s +
|
||||
" txqueuelen:" + ifconfig.tx_queue_len.to_s
|
||||
|
||||
rx_bytes = ifstat.rx_bytes
|
||||
tx_bytes = ifstat.tx_bytes
|
||||
|
|
|
@ -684,6 +684,7 @@ static void Init_rbsigar_constants(VALUE rclass)
|
|||
RB_SIGAR_CONST_INT(IFF_MULTICAST);
|
||||
RB_SIGAR_CONST_INT(IFF_SLAVE);
|
||||
RB_SIGAR_CONST_INT(IFF_MASTER);
|
||||
RB_SIGAR_CONST_INT(IFF_DYNAMIC);
|
||||
|
||||
RB_SIGAR_CONST_INT(NETCONN_CLIENT);
|
||||
RB_SIGAR_CONST_INT(NETCONN_SERVER);
|
||||
|
|
|
@ -188,6 +188,8 @@ typedef struct {
|
|||
char vendor[128];
|
||||
char model[128];
|
||||
int mhz;
|
||||
int mhz_max;
|
||||
int mhz_min;
|
||||
sigar_uint64_t cache_size;
|
||||
int total_sockets;
|
||||
int total_cores;
|
||||
|
@ -586,6 +588,7 @@ SIGAR_DECLARE(int) sigar_net_route_list_destroy(sigar_t *sigar,
|
|||
#define SIGAR_IFF_MULTICAST 0x800
|
||||
#define SIGAR_IFF_SLAVE 0x1000
|
||||
#define SIGAR_IFF_MASTER 0x2000
|
||||
#define SIGAR_IFF_DYNAMIC 0x4000
|
||||
|
||||
#define SIGAR_NULL_HWADDR "00:00:00:00:00:00"
|
||||
|
||||
|
@ -614,6 +617,7 @@ typedef struct {
|
|||
flags,
|
||||
mtu,
|
||||
metric;
|
||||
int tx_queue_len;
|
||||
} sigar_net_interface_config_t;
|
||||
|
||||
SIGAR_DECLARE(int)
|
||||
|
|
|
@ -363,8 +363,30 @@ int sigar_get_iftype(const char *name, int *type, int *inst);
|
|||
#endif
|
||||
|
||||
#define SIGAR_NIC_LOOPBACK "Local Loopback"
|
||||
#define SIGAR_NIC_UNSPEC "UNSPEC"
|
||||
#define SIGAR_NIC_SLIP "Serial Line IP"
|
||||
#define SIGAR_NIC_CSLIP "VJ Serial Line IP"
|
||||
#define SIGAR_NIC_SLIP6 "6-bit Serial Line IP"
|
||||
#define SIGAR_NIC_CSLIP6 "VJ 6-bit Serial Line IP"
|
||||
#define SIGAR_NIC_ADAPTIVE "Adaptive Serial Line IP"
|
||||
#define SIGAR_NIC_ETHERNET "Ethernet"
|
||||
#define SIGAR_NIC_ASH "Ash"
|
||||
#define SIGAR_NIC_FDDI "Fiber Distributed Data Interface"
|
||||
#define SIGAR_NIC_HIPPI "HIPPI"
|
||||
#define SIGAR_NIC_AX25 "AMPR AX.25"
|
||||
#define SIGAR_NIC_ROSE "AMPR ROSE"
|
||||
#define SIGAR_NIC_NETROM "AMPR NET/ROM"
|
||||
#define SIGAR_NIC_X25 "generic X.25"
|
||||
#define SIGAR_NIC_TUNNEL "IPIP Tunnel"
|
||||
#define SIGAR_NIC_PPP "Point-to-Point Protocol"
|
||||
#define SIGAR_NIC_HDLC "(Cisco)-HDLC"
|
||||
#define SIGAR_NIC_LAPB "LAPB"
|
||||
#define SIGAR_NIC_ARCNET "ARCnet"
|
||||
#define SIGAR_NIC_DLCI "Frame Relay DLCI"
|
||||
#define SIGAR_NIC_FRAD "Frame Relay Access Device"
|
||||
#define SIGAR_NIC_SIT "IPv6-in-IPv4"
|
||||
#define SIGAR_NIC_IRDA "IrLAP"
|
||||
#define SIGAR_NIC_EC "Econet"
|
||||
|
||||
#ifndef WIN32
|
||||
#include <netdb.h>
|
||||
|
|
|
@ -2236,7 +2236,8 @@ int sigar_file_system_usage_get(sigar_t *sigar,
|
|||
}
|
||||
|
||||
#ifdef DARWIN
|
||||
#define CTL_HW_FREQ "hw.cpufrequency"
|
||||
#define CTL_HW_FREQ_MAX "hw.cpufrequency_max"
|
||||
#define CTL_HW_FREQ_MIN "hw.cpufrequency_min"
|
||||
#else
|
||||
/* XXX FreeBSD 5.x+ only? */
|
||||
#define CTL_HW_FREQ "machdep.tsc_freq"
|
||||
|
@ -2246,7 +2247,7 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
|||
sigar_cpu_info_list_t *cpu_infos)
|
||||
{
|
||||
int i;
|
||||
unsigned int mhz;
|
||||
unsigned int mhz, mhz_min, mhz_max;
|
||||
int cache_size=SIGAR_FIELD_NOTIMPL;
|
||||
size_t size;
|
||||
char model[128], vendor[128], *ptr;
|
||||
|
@ -2263,18 +2264,35 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
|||
mhz = SIGAR_FIELD_NOTIMPL;
|
||||
}
|
||||
}
|
||||
if (sysctlbyname(CTL_HW_FREQ_MAX, &mhz_max, &size, NULL, 0) < 0) {
|
||||
mhz_max = SIGAR_FIELD_NOTIMPL;
|
||||
}
|
||||
if (sysctlbyname(CTL_HW_FREQ_MIN, &mhz_min, &size, NULL, 0) < 0) {
|
||||
mhz_min = SIGAR_FIELD_NOTIMPL;
|
||||
}
|
||||
#elif defined(__FreeBSD__)
|
||||
if (sysctlbyname(CTL_HW_FREQ, &mhz, &size, NULL, 0) < 0) {
|
||||
mhz = SIGAR_FIELD_NOTIMPL;
|
||||
}
|
||||
/* TODO */
|
||||
mhz_max = SIGAR_FIELD_NOTIMPL;
|
||||
mhz_min = SIGAR_FIELD_NOTIMPL;
|
||||
#else
|
||||
/*XXX OpenBSD*/
|
||||
mhz = SIGAR_FIELD_NOTIMPL;
|
||||
mhz_max = SIGAR_FIELD_NOTIMPL;
|
||||
mhz_min = SIGAR_FIELD_NOTIMPL;
|
||||
#endif
|
||||
|
||||
if (mhz != SIGAR_FIELD_NOTIMPL) {
|
||||
mhz /= 1000000;
|
||||
}
|
||||
if (mhz_max != SIGAR_FIELD_NOTIMPL) {
|
||||
mhz_max /= 1000000;
|
||||
}
|
||||
if (mhz_min != SIGAR_FIELD_NOTIMPL) {
|
||||
mhz_min /= 1000000;
|
||||
}
|
||||
|
||||
size = sizeof(model);
|
||||
#ifdef __OpenBSD__
|
||||
|
@ -2297,6 +2315,14 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
|||
/* freebsd4 */
|
||||
mhz = sigar_cpu_mhz_from_model(model);
|
||||
}
|
||||
/* XXX not sure */
|
||||
if (mhz_max == SIGAR_FIELD_NOTIMPL) {
|
||||
mhz_max = 0;
|
||||
}
|
||||
if (mhz_min == SIGAR_FIELD_NOTIMPL) {
|
||||
mhz_min = 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef DARWIN
|
||||
size = sizeof(vendor);
|
||||
|
@ -2351,6 +2377,8 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
|||
sigar_cpu_model_adjust(sigar, info);
|
||||
|
||||
info->mhz = mhz;
|
||||
info->mhz_max = mhz_max;
|
||||
info->mhz_min = mhz_min;
|
||||
info->cache_size = cache_size;
|
||||
info->total_cores = sigar->ncpu;
|
||||
info->cores_per_socket = sigar->lcpu;
|
||||
|
@ -2487,7 +2515,11 @@ static int sigar_ifmsg_init(sigar_t *sigar)
|
|||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
static int has_ifaddr(char *name)
|
||||
/**
|
||||
* @param name name of the interface
|
||||
* @param name_len length of name (w/o \0)
|
||||
*/
|
||||
static int has_ifaddr(char *name, size_t name_len)
|
||||
{
|
||||
int sock, status;
|
||||
struct ifreq ifr;
|
||||
|
@ -2495,7 +2527,8 @@ static int has_ifaddr(char *name)
|
|||
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||
return errno;
|
||||
}
|
||||
SIGAR_SSTRCPY(ifr.ifr_name, name);
|
||||
strncpy(ifr.ifr_name, name, MIN(sizeof(ifr.ifr_name) - 1, name_len));
|
||||
ifr.ifr_name[MIN(sizeof(ifr.ifr_name) - 1, name_len)] = '\0';
|
||||
if (ioctl(sock, SIOCGIFADDR, &ifr) == 0) {
|
||||
status = SIGAR_OK;
|
||||
}
|
||||
|
@ -2545,7 +2578,7 @@ static int sigar_ifmsg_iter(sigar_t *sigar, ifmsg_iter_t *iter)
|
|||
switch (iter->type) {
|
||||
case IFMSG_ITER_LIST:
|
||||
if (sdl->sdl_type == IFT_OTHER) {
|
||||
if (has_ifaddr(sdl->sdl_data) != SIGAR_OK) {
|
||||
if (has_ifaddr(sdl->sdl_data, sdl->sdl_nlen) != SIGAR_OK) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2566,7 +2599,7 @@ static int sigar_ifmsg_iter(sigar_t *sigar, ifmsg_iter_t *iter)
|
|||
break;
|
||||
|
||||
case IFMSG_ITER_GET:
|
||||
if (strEQ(iter->name, sdl->sdl_data)) {
|
||||
if (strlen(iter->name) == sdl->sdl_nlen && 0 == memcmp(iter->name, sdl->sdl_data, sdl->sdl_nlen)) {
|
||||
iter->data.ifm = ifm;
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
|
|
@ -1598,7 +1598,23 @@ static void get_cpuinfo_max_freq(sigar_cpu_info_t *cpu_info, int num)
|
|||
sigar_file2str(max_freq, max_freq, sizeof(max_freq)-1);
|
||||
|
||||
if (status == SIGAR_OK) {
|
||||
cpu_info->mhz = atoi(max_freq) / 1000;
|
||||
cpu_info->mhz_max = atoi(max_freq) / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
static void get_cpuinfo_min_freq(sigar_cpu_info_t *cpu_info, int num)
|
||||
{
|
||||
int status;
|
||||
char min_freq[PATH_MAX];
|
||||
snprintf(min_freq, sizeof(min_freq),
|
||||
"/sys/devices/system/cpu/cpu%d"
|
||||
"/cpufreq/cpuinfo_min_freq", num);
|
||||
|
||||
status =
|
||||
sigar_file2str(min_freq, min_freq, sizeof(min_freq)-1);
|
||||
|
||||
if (status == SIGAR_OK) {
|
||||
cpu_info->mhz_min = atoi(min_freq) / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1624,6 +1640,7 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
|||
|
||||
info = &cpu_infos->data[cpu_infos->number];
|
||||
get_cpuinfo_max_freq(info, cpu_infos->number);
|
||||
get_cpuinfo_min_freq(info, cpu_infos->number);
|
||||
|
||||
info->total_cores = sigar->ncpu;
|
||||
info->cores_per_socket = sigar->lcpu;
|
||||
|
|
87
src/sigar.c
87
src/sigar.c
|
@ -1503,12 +1503,77 @@ static void get_interface_type(sigar_net_interface_config_t *ifconfig,
|
|||
char *type;
|
||||
|
||||
switch (family) {
|
||||
case ARPHRD_SLIP:
|
||||
type = SIGAR_NIC_SLIP;
|
||||
break;
|
||||
case ARPHRD_CSLIP:
|
||||
type = SIGAR_NIC_CSLIP;
|
||||
break;
|
||||
case ARPHRD_SLIP6:
|
||||
type = SIGAR_NIC_SLIP6;
|
||||
break;
|
||||
case ARPHRD_CSLIP6:
|
||||
type = SIGAR_NIC_CSLIP6;
|
||||
break;
|
||||
case ARPHRD_ADAPT:
|
||||
type = SIGAR_NIC_ADAPTIVE;
|
||||
break;
|
||||
case ARPHRD_ETHER:
|
||||
type = SIGAR_NIC_ETHERNET;
|
||||
break;
|
||||
case ARPHRD_ASH:
|
||||
type = SIGAR_NIC_ASH;
|
||||
break;
|
||||
case ARPHRD_FDDI:
|
||||
type = SIGAR_NIC_FDDI;
|
||||
break;
|
||||
case ARPHRD_HIPPI:
|
||||
type = SIGAR_NIC_HIPPI;
|
||||
break;
|
||||
case ARPHRD_AX25:
|
||||
type = SIGAR_NIC_AX25;
|
||||
break;
|
||||
case ARPHRD_ROSE:
|
||||
type = SIGAR_NIC_ROSE;
|
||||
break;
|
||||
case ARPHRD_NETROM:
|
||||
type = SIGAR_NIC_NETROM;
|
||||
break;
|
||||
/* XXX more */
|
||||
case ARPHRD_X25:
|
||||
type = SIGAR_NIC_X25;
|
||||
break;
|
||||
case ARPHRD_TUNNEL:
|
||||
type = SIGAR_NIC_TUNNEL;
|
||||
break;
|
||||
case ARPHRD_PPP:
|
||||
type = SIGAR_NIC_PPP;
|
||||
break;
|
||||
case ARPHRD_CISCO:
|
||||
type = SIGAR_NIC_HDLC;
|
||||
break;
|
||||
case ARPHRD_LAPB:
|
||||
type = SIGAR_NIC_LAPB;
|
||||
break;
|
||||
case ARPHRD_ARCNET:
|
||||
type = SIGAR_NIC_ARCNET;
|
||||
break;
|
||||
case ARPHRD_DLCI:
|
||||
type = SIGAR_NIC_DLCI;
|
||||
break;
|
||||
case ARPHRD_FRAD:
|
||||
type = SIGAR_NIC_FRAD;
|
||||
break;
|
||||
case ARPHRD_SIT:
|
||||
type = SIGAR_NIC_SIT;
|
||||
break;
|
||||
case ARPHRD_IRDA:
|
||||
type = SIGAR_NIC_IRDA;
|
||||
break;
|
||||
case ARPHRD_ECONET:
|
||||
type = SIGAR_NIC_EC;
|
||||
break;
|
||||
default:
|
||||
type = SIGAR_NIC_ETHERNET;
|
||||
type = SIGAR_NIC_UNSPEC;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1552,9 +1617,13 @@ int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
|||
if (!ioctl(sock, SIOCGIFFLAGS, &ifr)) {
|
||||
sigar_uint64_t flags = ifr.ifr_flags;
|
||||
#ifdef __linux__
|
||||
# ifndef IFF_DYNAMIC
|
||||
# define IFF_DYNAMIC 0x8000 /* not in 2.2 kernel */
|
||||
# endif /* IFF_DYNAMIC */
|
||||
int is_mcast = flags & IFF_MULTICAST;
|
||||
int is_slave = flags & IFF_SLAVE;
|
||||
int is_master = flags & IFF_MASTER;
|
||||
int is_dynamic = flags & IFF_DYNAMIC;
|
||||
/*
|
||||
* XXX: should just define SIGAR_IFF_*
|
||||
* and test IFF_* bits on given platform.
|
||||
|
@ -1572,6 +1641,9 @@ int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
|||
if (is_master) {
|
||||
flags |= SIGAR_IFF_MASTER;
|
||||
}
|
||||
if (is_dynamic) {
|
||||
flags |= SIGAR_IFF_DYNAMIC;
|
||||
}
|
||||
#endif
|
||||
ifconfig->flags = flags;
|
||||
}
|
||||
|
@ -1644,6 +1716,17 @@ int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
|||
ifconfig->metric = ifr.ifr_metric ? ifr.ifr_metric : 1;
|
||||
}
|
||||
|
||||
#if defined(SIOCGIFTXQLEN)
|
||||
if (!ioctl(sock, SIOCGIFTXQLEN, &ifr)) {
|
||||
ifconfig->tx_queue_len = ifr.ifr_qlen;
|
||||
}
|
||||
else {
|
||||
ifconfig->tx_queue_len = -1; /* net-tools behaviour */
|
||||
}
|
||||
#else
|
||||
ifconfig->tx_queue_len = -1;
|
||||
#endif
|
||||
|
||||
close(sock);
|
||||
|
||||
/* XXX can we get a better description like win32? */
|
||||
|
|
|
@ -559,6 +559,9 @@ SIGAR_DECLARE(char *) sigar_net_interface_flags_to_string(sigar_uint64_t flags,
|
|||
if (flags & SIGAR_IFF_MASTER) {
|
||||
strcat(buf, "MASTER ");
|
||||
}
|
||||
if (flags & SIGAR_IFF_DYNAMIC) {
|
||||
strcat(buf, "DYNAMIC ");
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue