Merge branch 'SIGAR-165'
This commit is contained in:
commit
911abd2058
|
@ -1039,6 +1039,18 @@ use vars qw(%classes %cmds);
|
||||||
desc => '',
|
desc => '',
|
||||||
plat => '*'
|
plat => '*'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name => 'address6', type => 'NetAddress',
|
||||||
|
desc => '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'prefix6_length', type => 'Int',
|
||||||
|
desc => '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'scope6', type => 'Int',
|
||||||
|
desc => '',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name => 'destination', type => 'NetAddress',
|
name => 'destination', type => 'NetAddress',
|
||||||
desc => '',
|
desc => '',
|
||||||
|
|
|
@ -117,6 +117,13 @@ public class Ifconfig extends SigarCommandBase {
|
||||||
bcast +
|
bcast +
|
||||||
" Mask:" + ifconfig.getNetmask());
|
" Mask:" + ifconfig.getNetmask());
|
||||||
|
|
||||||
|
if (ifconfig.getPrefix6Length() != 0) {
|
||||||
|
println("\t" +
|
||||||
|
"inet6 addr: " + ifconfig.getAddress6() + "/" +
|
||||||
|
ifconfig.getPrefix6Length() +
|
||||||
|
" Scope:" + ifconfig.getScope6());
|
||||||
|
}
|
||||||
|
|
||||||
println("\t" +
|
println("\t" +
|
||||||
NetFlags.getIfFlagsString(flags) +
|
NetFlags.getIfFlagsString(flags) +
|
||||||
" MTU:" + ifconfig.getMtu() +
|
" MTU:" + ifconfig.getMtu() +
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
|
|
||||||
package org.hyperic.sigar.test;
|
package org.hyperic.sigar.test;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.Inet6Address;
|
||||||
|
|
||||||
import org.hyperic.sigar.Sigar;
|
import org.hyperic.sigar.Sigar;
|
||||||
import org.hyperic.sigar.SigarException;
|
import org.hyperic.sigar.SigarException;
|
||||||
import org.hyperic.sigar.SigarNotImplementedException;
|
import org.hyperic.sigar.SigarNotImplementedException;
|
||||||
|
@ -44,6 +47,14 @@ public class TestNetIf extends SigarTestCase {
|
||||||
assertTrueTrace("Address", ifconfig.getAddress());
|
assertTrueTrace("Address", ifconfig.getAddress());
|
||||||
assertTrueTrace("Netmask", ifconfig.getNetmask());
|
assertTrueTrace("Netmask", ifconfig.getNetmask());
|
||||||
|
|
||||||
|
if (ifconfig.getPrefix6Length() != 0) {
|
||||||
|
assertTrueTrace("Address6", ifconfig.getAddress6());
|
||||||
|
InetAddress in6 =
|
||||||
|
InetAddress.getByName(ifconfig.getAddress6());
|
||||||
|
assertTrue(in6 instanceof Inet6Address);
|
||||||
|
traceln("Link=" + in6.isLinkLocalAddress());
|
||||||
|
}
|
||||||
|
|
||||||
if (!getStats) {
|
if (!getStats) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,11 @@ iflist.each do |ifname|
|
||||||
puts "\t" + "inet addr:" + ifconfig.address +
|
puts "\t" + "inet addr:" + ifconfig.address +
|
||||||
ptp + bcast + " Mask:" + ifconfig.netmask
|
ptp + bcast + " Mask:" + ifconfig.netmask
|
||||||
|
|
||||||
|
if ifconfig.prefix6_length != 0
|
||||||
|
puts "\t" + "inet6 addr: " + ifconfig.address6 + "/" +
|
||||||
|
ifconfig.prefix6_length.to_s + " Scope:" + ifconfig.scope6.to_s
|
||||||
|
end
|
||||||
|
|
||||||
puts "\t" +
|
puts "\t" +
|
||||||
Sigar.net_interface_flags_to_s(flags) +
|
Sigar.net_interface_flags_to_s(flags) +
|
||||||
" MTU:" + ifconfig.mtu.to_s +
|
" MTU:" + ifconfig.mtu.to_s +
|
||||||
|
|
|
@ -587,6 +587,15 @@ SIGAR_DECLARE(int) sigar_net_route_list_destroy(sigar_t *sigar,
|
||||||
|
|
||||||
#define SIGAR_NULL_HWADDR "00:00:00:00:00:00"
|
#define SIGAR_NULL_HWADDR "00:00:00:00:00:00"
|
||||||
|
|
||||||
|
/* scope values from linux-2.6/include/net/ipv6.h */
|
||||||
|
#define SIGAR_IPV6_ADDR_ANY 0x0000
|
||||||
|
#define SIGAR_IPV6_ADDR_UNICAST 0x0001
|
||||||
|
#define SIGAR_IPV6_ADDR_MULTICAST 0x0002
|
||||||
|
#define SIGAR_IPV6_ADDR_LOOPBACK 0x0010
|
||||||
|
#define SIGAR_IPV6_ADDR_LINKLOCAL 0x0020
|
||||||
|
#define SIGAR_IPV6_ADDR_SITELOCAL 0x0040
|
||||||
|
#define SIGAR_IPV6_ADDR_COMPATv4 0x0080
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char name[16];
|
char name[16];
|
||||||
char type[64];
|
char type[64];
|
||||||
|
@ -596,6 +605,9 @@ typedef struct {
|
||||||
sigar_net_address_t destination;
|
sigar_net_address_t destination;
|
||||||
sigar_net_address_t broadcast;
|
sigar_net_address_t broadcast;
|
||||||
sigar_net_address_t netmask;
|
sigar_net_address_t netmask;
|
||||||
|
sigar_net_address_t address6;
|
||||||
|
int prefix6_length;
|
||||||
|
int scope6;
|
||||||
sigar_uint64_t
|
sigar_uint64_t
|
||||||
flags,
|
flags,
|
||||||
mtu,
|
mtu,
|
||||||
|
|
|
@ -291,6 +291,30 @@ int sigar_net_connection_list_grow(sigar_net_connection_list_t *connlist);
|
||||||
SIGAR_ZERO(&ifconfig->hwaddr.addr.mac); \
|
SIGAR_ZERO(&ifconfig->hwaddr.addr.mac); \
|
||||||
ifconfig->hwaddr.family = SIGAR_AF_LINK
|
ifconfig->hwaddr.family = SIGAR_AF_LINK
|
||||||
|
|
||||||
|
int sigar_net_interface_ipv6_config_get(sigar_t *sigar, const char *name,
|
||||||
|
sigar_net_interface_config_t *ifconfig);
|
||||||
|
|
||||||
|
#define sigar_net_interface_ipv6_config_init(ifconfig) \
|
||||||
|
ifconfig->address6.family = SIGAR_AF_INET6; \
|
||||||
|
ifconfig->prefix6_length = 0; \
|
||||||
|
ifconfig->scope6 = 0
|
||||||
|
|
||||||
|
#define SIGAR_SIN6(s) ((struct sockaddr_in6 *)(s))
|
||||||
|
|
||||||
|
#define SIGAR_SIN6_ADDR(s) &SIGAR_SIN6(s)->sin6_addr
|
||||||
|
|
||||||
|
#define sigar_net_interface_scope6_set(ifconfig, addr) \
|
||||||
|
if (IN6_IS_ADDR_LINKLOCAL(addr)) \
|
||||||
|
ifconfig->scope6 = SIGAR_IPV6_ADDR_LINKLOCAL; \
|
||||||
|
else if (IN6_IS_ADDR_SITELOCAL(addr)) \
|
||||||
|
ifconfig->scope6 = SIGAR_IPV6_ADDR_SITELOCAL; \
|
||||||
|
else if (IN6_IS_ADDR_V4COMPAT(addr)) \
|
||||||
|
ifconfig->scope6 = SIGAR_IPV6_ADDR_COMPATv4; \
|
||||||
|
else if (IN6_IS_ADDR_LOOPBACK(addr)) \
|
||||||
|
ifconfig->scope6 = SIGAR_IPV6_ADDR_LOOPBACK; \
|
||||||
|
else \
|
||||||
|
ifconfig->scope6 = SIGAR_IPV6_ADDR_ANY
|
||||||
|
|
||||||
int sigar_tcp_curr_estab(sigar_t *sigar, sigar_tcp_t *tcp);
|
int sigar_tcp_curr_estab(sigar_t *sigar, sigar_tcp_t *tcp);
|
||||||
|
|
||||||
int sigar_who_list_create(sigar_who_list_t *wholist);
|
int sigar_who_list_create(sigar_who_list_t *wholist);
|
||||||
|
|
|
@ -1507,6 +1507,12 @@ int sigar_net_interface_stat_get(sigar_t *sigar,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sigar_net_interface_ipv6_config_get(sigar_t *sigar, const char *name,
|
||||||
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
{
|
||||||
|
return SIGAR_ENOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
#define IS_TCP_SERVER(state, flags) \
|
#define IS_TCP_SERVER(state, flags) \
|
||||||
((flags & SIGAR_NETCONN_SERVER) && (state == TCPS_LISTEN))
|
((flags & SIGAR_NETCONN_SERVER) && (state == TCPS_LISTEN))
|
||||||
|
|
||||||
|
|
|
@ -2593,6 +2593,76 @@ int sigar_net_interface_list_get(sigar_t *sigar,
|
||||||
return sigar_ifmsg_iter(sigar, &iter);
|
return sigar_ifmsg_iter(sigar, &iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <ifaddrs.h>
|
||||||
|
|
||||||
|
/* in6_prefixlen derived from freebsd/sbin/ifconfig/af_inet6.c */
|
||||||
|
static int sigar_in6_prefixlen(struct sockaddr *netmask)
|
||||||
|
{
|
||||||
|
struct in6_addr *addr = SIGAR_SIN6_ADDR(netmask);
|
||||||
|
u_char *name = (u_char *)addr;
|
||||||
|
int size = sizeof(*addr);
|
||||||
|
int byte, bit, plen = 0;
|
||||||
|
|
||||||
|
for (byte = 0; byte < size; byte++, plen += 8) {
|
||||||
|
if (name[byte] != 0xff) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (byte == size) {
|
||||||
|
return plen;
|
||||||
|
}
|
||||||
|
for (bit = 7; bit != 0; bit--, plen++) {
|
||||||
|
if (!(name[byte] & (1 << bit))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (; bit != 0; bit--) {
|
||||||
|
if (name[byte] & (1 << bit)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
byte++;
|
||||||
|
for (; byte < size; byte++) {
|
||||||
|
if (name[byte]) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return plen;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sigar_net_interface_ipv6_config_get(sigar_t *sigar, const char *name,
|
||||||
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
{
|
||||||
|
int status = SIGAR_ENOENT;
|
||||||
|
struct ifaddrs *addrs, *ifa;
|
||||||
|
|
||||||
|
if (getifaddrs(&addrs) != 0) {
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ifa=addrs; ifa; ifa=ifa->ifa_next) {
|
||||||
|
if (ifa->ifa_addr &&
|
||||||
|
(ifa->ifa_addr->sa_family == AF_INET6) &&
|
||||||
|
strEQ(ifa->ifa_name, name))
|
||||||
|
{
|
||||||
|
status = SIGAR_OK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == SIGAR_OK) {
|
||||||
|
struct in6_addr *addr = SIGAR_SIN6_ADDR(ifa->ifa_addr);
|
||||||
|
|
||||||
|
sigar_net_address6_set(ifconfig->address6, addr);
|
||||||
|
sigar_net_interface_scope6_set(ifconfig, addr);
|
||||||
|
ifconfig->prefix6_length = sigar_in6_prefixlen(ifa->ifa_netmask);
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(addrs);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
||||||
sigar_net_interface_config_t *ifconfig)
|
sigar_net_interface_config_t *ifconfig)
|
||||||
{
|
{
|
||||||
|
@ -2682,6 +2752,9 @@ int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
||||||
SIGAR_SSTRCPY(ifconfig->description,
|
SIGAR_SSTRCPY(ifconfig->description,
|
||||||
ifconfig->name);
|
ifconfig->name);
|
||||||
|
|
||||||
|
sigar_net_interface_ipv6_config_init(ifconfig);
|
||||||
|
sigar_net_interface_ipv6_config_get(sigar, name, ifconfig);
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -872,6 +872,12 @@ int sigar_net_interface_stat_get(sigar_t *sigar, const char *name,
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sigar_net_interface_ipv6_config_get(sigar_t *sigar, const char *name,
|
||||||
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
{
|
||||||
|
return SIGAR_ENOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
static int net_conn_get_udp_listen(sigar_net_connection_walker_t *walker)
|
static int net_conn_get_udp_listen(sigar_net_connection_walker_t *walker)
|
||||||
{
|
{
|
||||||
sigar_t *sigar = walker->sigar;
|
sigar_t *sigar = walker->sigar;
|
||||||
|
|
|
@ -2092,6 +2092,45 @@ static int sigar_net_connection_get(sigar_t *sigar,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sigar_net_interface_ipv6_config_get(sigar_t *sigar, const char *name,
|
||||||
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char addr[32+1], ifname[8+1];
|
||||||
|
int status = SIGAR_ENOENT;
|
||||||
|
int idx, prefix, scope, flags;
|
||||||
|
|
||||||
|
if (!(fp = fopen(PROC_FS_ROOT "net/if_inet6", "r"))) {
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fscanf(fp, "%32s %02x %02x %02x %02x %8s\n",
|
||||||
|
addr, &idx, &prefix, &scope, &flags, ifname) != EOF)
|
||||||
|
{
|
||||||
|
if (strEQ(name, ifname)) {
|
||||||
|
status = SIGAR_OK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (status == SIGAR_OK) {
|
||||||
|
int i=0;
|
||||||
|
unsigned char *addr6 = (unsigned char *)&(ifconfig->address6.addr.in6);
|
||||||
|
char *ptr = addr;
|
||||||
|
|
||||||
|
for (i=0; i<16; i++, ptr+=2) {
|
||||||
|
addr6[i] = (unsigned char)hex2int(ptr, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ifconfig->prefix6_length = prefix;
|
||||||
|
ifconfig->scope6 = scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
#define SNMP_TCP_PREFIX "Tcp: "
|
#define SNMP_TCP_PREFIX "Tcp: "
|
||||||
|
|
||||||
SIGAR_DECLARE(int)
|
SIGAR_DECLARE(int)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <net/route.h>
|
#include <net/route.h>
|
||||||
#include <sys/lwp.h>
|
#include <sys/lwp.h>
|
||||||
#include <sys/proc.h>
|
#include <sys/proc.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
#include <sys/swap.h>
|
#include <sys/swap.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/systeminfo.h>
|
#include <sys/systeminfo.h>
|
||||||
|
@ -2083,6 +2084,30 @@ int sigar_net_interface_stat_get(sigar_t *sigar, const char *name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sigar_net_interface_ipv6_config_get(sigar_t *sigar, const char *name,
|
||||||
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
{
|
||||||
|
int sock;
|
||||||
|
struct lifreq lifr;
|
||||||
|
|
||||||
|
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIGAR_SSTRCPY(lifr.lifr_name, name);
|
||||||
|
|
||||||
|
if (ioctl(sock, SIOCGLIFADDR, &lifr) == 0) {
|
||||||
|
struct in6_addr *addr = SIGAR_SIN6_ADDR(&lifr.lifr_addr);
|
||||||
|
|
||||||
|
sigar_net_address6_set(ifconfig->address6, addr);
|
||||||
|
sigar_net_interface_scope6_set(ifconfig, addr);
|
||||||
|
ifconfig->prefix6_length = lifr.lifr_addrlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(sock);
|
||||||
|
return SIGAR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
#define TCPQ_SIZE(s) ((s) >= 0 ? (s) : 0)
|
#define TCPQ_SIZE(s) ((s) >= 0 ? (s) : 0)
|
||||||
|
|
||||||
static int tcp_connection_get(sigar_net_connection_walker_t *walker,
|
static int tcp_connection_get(sigar_net_connection_walker_t *walker,
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "sigar_pdh.h"
|
#include "sigar_pdh.h"
|
||||||
#include "sigar_os.h"
|
#include "sigar_os.h"
|
||||||
#include "sigar_util.h"
|
#include "sigar_util.h"
|
||||||
|
#include "sigar_format.h"
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
|
|
||||||
#define USING_WIDE_S(s) (s)->using_wide
|
#define USING_WIDE_S(s) (s)->using_wide
|
||||||
|
@ -2219,12 +2220,11 @@ static int sigar_get_adapter_info(sigar_t *sigar,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sigar_get_adapters_addresses(sigar_t *sigar,
|
static int sigar_get_adapters_addresses(sigar_t *sigar,
|
||||||
|
ULONG family, ULONG flags,
|
||||||
PIP_ADAPTER_ADDRESSES *addrs)
|
PIP_ADAPTER_ADDRESSES *addrs)
|
||||||
{
|
{
|
||||||
ULONG size = sigar->ifconf_len;
|
ULONG size = sigar->ifconf_len;
|
||||||
ULONG rc;
|
ULONG rc;
|
||||||
ULONG flags =
|
|
||||||
GAA_FLAG_SKIP_DNS_SERVER|GAA_FLAG_SKIP_MULTICAST;
|
|
||||||
|
|
||||||
DLLMOD_INIT(iphlpapi, FALSE);
|
DLLMOD_INIT(iphlpapi, FALSE);
|
||||||
|
|
||||||
|
@ -2233,7 +2233,7 @@ static int sigar_get_adapters_addresses(sigar_t *sigar,
|
||||||
}
|
}
|
||||||
|
|
||||||
*addrs = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf;
|
*addrs = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf;
|
||||||
rc = sigar_GetAdaptersAddresses(AF_UNSPEC,
|
rc = sigar_GetAdaptersAddresses(family,
|
||||||
flags,
|
flags,
|
||||||
NULL,
|
NULL,
|
||||||
*addrs,
|
*addrs,
|
||||||
|
@ -2249,7 +2249,7 @@ static int sigar_get_adapters_addresses(sigar_t *sigar,
|
||||||
sigar->ifconf_len);
|
sigar->ifconf_len);
|
||||||
|
|
||||||
*addrs = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf;
|
*addrs = (PIP_ADAPTER_ADDRESSES)sigar->ifconf_buf;
|
||||||
rc = sigar_GetAdaptersAddresses(AF_UNSPEC,
|
rc = sigar_GetAdaptersAddresses(family,
|
||||||
flags,
|
flags,
|
||||||
NULL,
|
NULL,
|
||||||
*addrs,
|
*addrs,
|
||||||
|
@ -2637,6 +2637,42 @@ sigar_net_interface_list_get(sigar_t *sigar,
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int sigar_net_interface_ipv6_config_find(sigar_t *sigar, int index,
|
||||||
|
sigar_net_interface_config_t *ifconfig)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
PIP_ADAPTER_ADDRESSES aa, addrs;
|
||||||
|
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
|
||||||
|
|
||||||
|
status = sigar_get_adapters_addresses(sigar, AF_UNSPEC, flags, &aa);
|
||||||
|
|
||||||
|
if (status != SIGAR_OK) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (addrs = aa; addrs; addrs = addrs->Next) {
|
||||||
|
PIP_ADAPTER_UNICAST_ADDRESS addr;
|
||||||
|
if (addrs->IfIndex != index) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (addr = addrs->FirstUnicastAddress; addr; addr = addr->Next) {
|
||||||
|
struct sockaddr *sa = addr->Address.lpSockaddr;
|
||||||
|
|
||||||
|
if (sa->sa_family == AF_INET6) {
|
||||||
|
struct in6_addr *inet6 = SIGAR_SIN6_ADDR(sa);
|
||||||
|
|
||||||
|
sigar_net_address6_set(ifconfig->address6, inet6);
|
||||||
|
sigar_net_interface_scope6_set(ifconfig, inet6);
|
||||||
|
if (addrs->FirstPrefix) {
|
||||||
|
ifconfig->prefix6_length = addrs->FirstPrefix->PrefixLength;
|
||||||
|
}
|
||||||
|
return SIGAR_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SIGAR_ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
SIGAR_DECLARE(int)
|
SIGAR_DECLARE(int)
|
||||||
sigar_net_interface_config_get(sigar_t *sigar,
|
sigar_net_interface_config_get(sigar_t *sigar,
|
||||||
const char *name,
|
const char *name,
|
||||||
|
@ -2717,6 +2753,9 @@ sigar_net_interface_config_get(sigar_t *sigar,
|
||||||
SIGAR_NIC_ETHERNET);
|
SIGAR_NIC_ETHERNET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sigar_net_interface_ipv6_config_init(ifconfig);
|
||||||
|
sigar_net_interface_ipv6_config_find(sigar, ifr->dwIndex, ifconfig);
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1642,6 +1642,9 @@ int sigar_net_interface_config_get(sigar_t *sigar, const char *name,
|
||||||
SIGAR_SSTRCPY(ifconfig->description,
|
SIGAR_SSTRCPY(ifconfig->description,
|
||||||
ifconfig->name);
|
ifconfig->name);
|
||||||
|
|
||||||
|
sigar_net_interface_ipv6_config_init(ifconfig);
|
||||||
|
sigar_net_interface_ipv6_config_get(sigar, name, ifconfig);
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -353,7 +353,26 @@ SIGAR_DECLARE(int) sigar_net_address_equals(sigar_net_address_t *addr1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(WIN32) && !defined(NETWARE) && !defined(__hpux)
|
#if defined(WIN32)
|
||||||
|
static char *sigar_inet_ntop(int af, const void *src, char *dst, int cnt)
|
||||||
|
{
|
||||||
|
struct sockaddr_in6 sa; /* note only using this for AF_INET6 */
|
||||||
|
|
||||||
|
memset(&sa, '\0', sizeof(sa));
|
||||||
|
sa.sin6_family = af;
|
||||||
|
memcpy(&sa.sin6_addr, src, sizeof(sa.sin6_addr));
|
||||||
|
|
||||||
|
if (getnameinfo((struct sockaddr *)&sa, sizeof(sa),
|
||||||
|
dst, cnt, NULL, 0, NI_NUMERICHOST))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#define sigar_inet_ntop_errno GetLastError()
|
||||||
|
#elif !defined(NETWARE) && !defined(__hpux)
|
||||||
#define sigar_inet_ntop inet_ntop
|
#define sigar_inet_ntop inet_ntop
|
||||||
#define sigar_inet_ntop_errno errno
|
#define sigar_inet_ntop_errno errno
|
||||||
#else
|
#else
|
||||||
|
@ -365,6 +384,7 @@ SIGAR_DECLARE(int) sigar_net_address_to_string(sigar_t *sigar,
|
||||||
sigar_net_address_t *address,
|
sigar_net_address_t *address,
|
||||||
char *addr_str)
|
char *addr_str)
|
||||||
{
|
{
|
||||||
|
*addr_str = '\0';
|
||||||
switch (address->family) {
|
switch (address->family) {
|
||||||
case SIGAR_AF_INET6:
|
case SIGAR_AF_INET6:
|
||||||
if (sigar_inet_ntop(AF_INET6, (const void *)&address->addr.in6,
|
if (sigar_inet_ntop(AF_INET6, (const void *)&address->addr.in6,
|
||||||
|
|
Loading…
Reference in New Issue