try IFMIB first to get hwaddr and MTU
This commit is contained in:
		
							parent
							
								
									9fa41cc1c7
								
							
						
					
					
						commit
						61a2a98f67
					
				@ -1919,9 +1919,9 @@ static int sigar_get_if_table(sigar_t *sigar, PMIB_IFTABLE *iftable)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SIGAR_DECLARE(int)
 | 
			
		||||
sigar_net_interface_stat_get(sigar_t *sigar, const char *name,
 | 
			
		||||
                             sigar_net_interface_stat_t *ifstat)
 | 
			
		||||
static int get_mib_ifrow(sigar_t *sigar,
 | 
			
		||||
                         const char *name,
 | 
			
		||||
                         MIB_IFROW **ifrp)
 | 
			
		||||
{
 | 
			
		||||
    DWORD rc, i;
 | 
			
		||||
    MIB_IFTABLE *ift;
 | 
			
		||||
@ -1964,6 +1964,42 @@ sigar_net_interface_stat_get(sigar_t *sigar, const char *name,
 | 
			
		||||
        return ENOENT;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *ifrp = ifr;
 | 
			
		||||
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sigar_get_ifentry_config(sigar_t *sigar,
 | 
			
		||||
                             sigar_net_interface_config_t *ifconfig)
 | 
			
		||||
{
 | 
			
		||||
    MIB_IFROW *ifr;
 | 
			
		||||
    int status;
 | 
			
		||||
 | 
			
		||||
    status = get_mib_ifrow(sigar, ifconfig->name, &ifr);
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ifconfig->mtu = ifr->dwMtu;
 | 
			
		||||
 | 
			
		||||
    sigar_hwaddr_format(ifconfig->hwaddr,
 | 
			
		||||
                        ifr->bPhysAddr);
 | 
			
		||||
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SIGAR_DECLARE(int)
 | 
			
		||||
sigar_net_interface_stat_get(sigar_t *sigar, const char *name,
 | 
			
		||||
                             sigar_net_interface_stat_t *ifstat)
 | 
			
		||||
{
 | 
			
		||||
    MIB_IFROW *ifr;
 | 
			
		||||
    int status;
 | 
			
		||||
 | 
			
		||||
    status = get_mib_ifrow(sigar, name, &ifr);
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    ifstat->rx_bytes    = ifr->dwInOctets;
 | 
			
		||||
    ifstat->rx_packets  = ifr->dwInUcastPkts + ifr->dwInNUcastPkts; 
 | 
			
		||||
    ifstat->rx_errors   = ifr->dwInErrors;
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,8 @@ int sigar_wsa_init(sigar_t *sigar)
 | 
			
		||||
 | 
			
		||||
#include <nb30.h>
 | 
			
		||||
 | 
			
		||||
static void hwaddr_lookup(sigar_net_interface_config_t *ifconfig, int num)
 | 
			
		||||
static void hwaddr_lookup_netbios(sigar_net_interface_config_t *ifconfig,
 | 
			
		||||
                                  int num)
 | 
			
		||||
{
 | 
			
		||||
    NCB ncb;
 | 
			
		||||
    UCHAR rc;
 | 
			
		||||
@ -99,13 +100,30 @@ static void hwaddr_lookup(sigar_net_interface_config_t *ifconfig, int num)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void hwaddr_lookup(sigar_t *sigar,
 | 
			
		||||
                          sigar_net_interface_config_t *ifconfig,
 | 
			
		||||
                          int num)
 | 
			
		||||
{
 | 
			
		||||
    /* try IFMIB first, fallback on netbios for hwaddr */
 | 
			
		||||
    if (sigar_get_ifentry_config(sigar, ifconfig) != SIGAR_OK) {
 | 
			
		||||
        if (ifconfig->flags & SIGAR_IFF_LOOPBACK) {
 | 
			
		||||
            sigar_hwaddr_set_null(ifconfig);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            hwaddr_lookup_netbios(ifconfig, num);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* NETWARE */
 | 
			
		||||
 | 
			
		||||
static void hwaddr_lookup(sigar_net_interface_config_t *ifconfig, int num)
 | 
			
		||||
static void hwaddr_lookup(sigar_t *sigar,
 | 
			
		||||
                          sigar_net_interface_config_t *ifconfig,
 | 
			
		||||
                          int num)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t addr[6];
 | 
			
		||||
 | 
			
		||||
    if (netware_net_macaddr(num, addr) == 0) {
 | 
			
		||||
    if (netware_net_macaddr(num+1, addr) == 0) {
 | 
			
		||||
        sigar_hwaddr_format(ifconfig->hwaddr, addr);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
@ -224,19 +242,16 @@ sigar_net_interface_config_get(sigar_t *sigar,
 | 
			
		||||
        ifconfig->flags |= SIGAR_IFF_LOOPBACK;
 | 
			
		||||
        ifconfig->destination = ifconfig->address;
 | 
			
		||||
        ifconfig->broadcast = 0;
 | 
			
		||||
#ifdef NETWARE
 | 
			
		||||
        hwaddr_lookup(ifconfig, i+1);
 | 
			
		||||
#else
 | 
			
		||||
        sigar_hwaddr_set_null(ifconfig);
 | 
			
		||||
#endif
 | 
			
		||||
        SIGAR_SSTRCPY(ifconfig->type,
 | 
			
		||||
                      SIGAR_NIC_LOOPBACK);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        hwaddr_lookup(ifconfig, i);
 | 
			
		||||
        SIGAR_SSTRCPY(ifconfig->type,
 | 
			
		||||
                      SIGAR_NIC_ETHERNET);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hwaddr_lookup(sigar, ifconfig, i);
 | 
			
		||||
 | 
			
		||||
    if (flags & IFF_POINTTOPOINT) {
 | 
			
		||||
        ifconfig->flags |= SIGAR_IFF_POINTOPOINT;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user