net_info dhcp_server and default_gateway for windows
This commit is contained in:
		
							parent
							
								
									b3ca673da2
								
							
						
					
					
						commit
						6b238421e7
					
				@ -74,6 +74,27 @@ typedef struct {
 | 
			
		||||
    UINT EnableDns;
 | 
			
		||||
} FIXED_INFO, *PFIXED_INFO;
 | 
			
		||||
 | 
			
		||||
typedef struct _IP_ADAPTER_INFO {
 | 
			
		||||
    struct _IP_ADAPTER_INFO* Next;
 | 
			
		||||
    DWORD ComboIndex;
 | 
			
		||||
    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
 | 
			
		||||
    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
 | 
			
		||||
    UINT AddressLength;
 | 
			
		||||
    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
 | 
			
		||||
    DWORD Index;
 | 
			
		||||
    UINT Type;
 | 
			
		||||
    UINT DhcpEnabled;
 | 
			
		||||
    PIP_ADDR_STRING CurrentIpAddress;
 | 
			
		||||
    IP_ADDR_STRING IpAddressList;
 | 
			
		||||
    IP_ADDR_STRING GatewayList;
 | 
			
		||||
    IP_ADDR_STRING DhcpServer;
 | 
			
		||||
    BOOL HaveWins;
 | 
			
		||||
    IP_ADDR_STRING PrimaryWinsServer;
 | 
			
		||||
    IP_ADDR_STRING SecondaryWinsServer;
 | 
			
		||||
    time_t LeaseObtained;
 | 
			
		||||
    time_t LeaseExpires;
 | 
			
		||||
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
 | 
			
		||||
 | 
			
		||||
/* end iptypes.h */
 | 
			
		||||
 | 
			
		||||
#include <iprtrmib.h>
 | 
			
		||||
@ -122,6 +143,8 @@ typedef DWORD (CALLBACK *LPGETUDPEXTABLE)(PMIB_UDPEXTABLE *, BOOL, HANDLE,
 | 
			
		||||
 | 
			
		||||
typedef DWORD (CALLBACK *LPNETPARAMS)(PFIXED_INFO, PULONG);
 | 
			
		||||
 | 
			
		||||
typedef DWORD (CALLBACK *LPADAPTERSINFO)(PIP_ADAPTER_INFO, PULONG);
 | 
			
		||||
 | 
			
		||||
typedef DWORD (CALLBACK *LPSYSINFO)(DWORD, PVOID, ULONG, PULONG);
 | 
			
		||||
 | 
			
		||||
typedef BOOL (CALLBACK *LPENUMMODULES)(HANDLE, HMODULE*,
 | 
			
		||||
@ -171,6 +194,7 @@ struct sigar_t {
 | 
			
		||||
    LPGETUDPTABLE get_udp_table;
 | 
			
		||||
    LPGETUDPEXTABLE get_udpx_table;
 | 
			
		||||
    LPNETPARAMS get_net_params;
 | 
			
		||||
    LPADAPTERSINFO get_adapters_info;
 | 
			
		||||
    LPSYSINFO get_ntsys_info;
 | 
			
		||||
    LPENUMMODULES enum_modules;
 | 
			
		||||
    LPGETMODULENAME get_module_name;
 | 
			
		||||
 | 
			
		||||
@ -227,6 +227,8 @@ int sigar_os_open(sigar_t **sigar)
 | 
			
		||||
                                            "UdpExTableFromStack");
 | 
			
		||||
        (*sigar)->get_net_params =
 | 
			
		||||
            (LPNETPARAMS)GetProcAddress(h, "GetNetworkParams");
 | 
			
		||||
        (*sigar)->get_adapters_info =
 | 
			
		||||
            (LPADAPTERSINFO)GetProcAddress(h, "GetAdaptersInfo");
 | 
			
		||||
        (*sigar)->ip_handle = h;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
@ -1633,6 +1635,43 @@ SIGAR_DECLARE(int) sigar_net_info_get(sigar_t *sigar,
 | 
			
		||||
                      ip->IpAddress.String);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (sigar->get_adapters_info) {
 | 
			
		||||
        PIP_ADAPTER_INFO buffer, info;
 | 
			
		||||
        DWORD rc;
 | 
			
		||||
        len = 0;
 | 
			
		||||
        rc = sigar->get_adapters_info(NULL, &len);
 | 
			
		||||
 | 
			
		||||
        if (rc != ERROR_BUFFER_OVERFLOW) {
 | 
			
		||||
            return rc;
 | 
			
		||||
        }
 | 
			
		||||
        buffer = malloc(len);
 | 
			
		||||
 | 
			
		||||
        rc = sigar->get_adapters_info(buffer, &len);
 | 
			
		||||
        if (rc != NO_ERROR) {
 | 
			
		||||
            free(buffer);
 | 
			
		||||
            return rc;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        info = buffer;
 | 
			
		||||
 | 
			
		||||
        while (info) {
 | 
			
		||||
            /* should only be 1 */
 | 
			
		||||
            if (info->GatewayList.IpAddress.String[0]) {
 | 
			
		||||
                SIGAR_SSTRCPY(netinfo->default_gateway,
 | 
			
		||||
                              info->GatewayList.IpAddress.String);
 | 
			
		||||
            }
 | 
			
		||||
            if (info->DhcpEnabled) {
 | 
			
		||||
                SIGAR_SSTRCPY(netinfo->dhcp_server,
 | 
			
		||||
                              info->DhcpServer.IpAddress.String);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            info = info->Next;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        free(buffer);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user