(SIGAR-199) arp_list solaris impl
This commit is contained in:
parent
3098fca444
commit
8e77198e0f
|
@ -2455,7 +2455,74 @@ int sigar_nfs_server_v3_get(sigar_t *sigar,
|
||||||
int sigar_arp_list_get(sigar_t *sigar,
|
int sigar_arp_list_get(sigar_t *sigar,
|
||||||
sigar_arp_list_t *arplist)
|
sigar_arp_list_t *arplist)
|
||||||
{
|
{
|
||||||
return SIGAR_ENOTIMPL;
|
char *data;
|
||||||
|
int len, rc;
|
||||||
|
struct opthdr *op;
|
||||||
|
size_t nread=0, size=0;
|
||||||
|
const char *size_from;
|
||||||
|
|
||||||
|
sigar_arp_list_create(arplist);
|
||||||
|
|
||||||
|
while ((rc = get_mib2(&sigar->mib2, &op, &data, &len)) == GET_MIB2_OK) {
|
||||||
|
mib2_ipNetToMediaEntry_t *entry;
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
if (op->level != MIB2_IP) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (op->name == 0) {
|
||||||
|
/* we want to use this size for bincompat */
|
||||||
|
size = ((mib2_ip_t *)data)->ipNetToMediaEntrySize;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (op->name != MIB2_IP_MEDIA) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == 0) {
|
||||||
|
size_from = "sizeof";
|
||||||
|
size = sizeof(*entry);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
size_from = "mib2_ip";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SIGAR_LOG_IS_DEBUG(sigar)) {
|
||||||
|
sigar_log_printf(sigar, SIGAR_LOG_DEBUG,
|
||||||
|
"[arp_list] ipNetToMediaEntrySize=%d (from %s)",
|
||||||
|
size, size_from);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (entry = (mib2_ipNetToMediaEntry_t *)data, end = data + len;
|
||||||
|
(char *)entry < end;
|
||||||
|
nread+=size, entry = (mib2_ipNetToMediaEntry_t *)((char *)data+nread))
|
||||||
|
{
|
||||||
|
sigar_arp_t *arp;
|
||||||
|
|
||||||
|
SIGAR_ARP_LIST_GROW(arplist);
|
||||||
|
arp = &arplist->data[arplist->number++];
|
||||||
|
|
||||||
|
sigar_net_address_set(arp->address,
|
||||||
|
entry->ipNetToMediaNetAddress);
|
||||||
|
|
||||||
|
sigar_net_address_mac_set(arp->hwaddr,
|
||||||
|
entry->ipNetToMediaPhysAddress.o_bytes,
|
||||||
|
entry->ipNetToMediaPhysAddress.o_length);
|
||||||
|
|
||||||
|
SIGAR_SSTRCPY(arp->ifname, entry->ipNetToMediaIfIndex.o_bytes);
|
||||||
|
|
||||||
|
arp->flags = entry->ipNetToMediaInfo.ntm_flags;
|
||||||
|
SIGAR_SSTRCPY(arp->type, "ether"); /*XXX*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc != GET_MIB2_EOD) {
|
||||||
|
close_mib2(&sigar->mib2);
|
||||||
|
return SIGAR_EMIB2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_port(sigar_t *sigar, struct ps_prochandle *phandle,
|
static int find_port(sigar_t *sigar, struct ps_prochandle *phandle,
|
||||||
|
|
Loading…
Reference in New Issue