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;
 | 
					    UINT EnableDns;
 | 
				
			||||||
} FIXED_INFO, *PFIXED_INFO;
 | 
					} 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 */
 | 
					/* end iptypes.h */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <iprtrmib.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 *LPNETPARAMS)(PFIXED_INFO, PULONG);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef DWORD (CALLBACK *LPADAPTERSINFO)(PIP_ADAPTER_INFO, PULONG);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef DWORD (CALLBACK *LPSYSINFO)(DWORD, PVOID, ULONG, PULONG);
 | 
					typedef DWORD (CALLBACK *LPSYSINFO)(DWORD, PVOID, ULONG, PULONG);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef BOOL (CALLBACK *LPENUMMODULES)(HANDLE, HMODULE*,
 | 
					typedef BOOL (CALLBACK *LPENUMMODULES)(HANDLE, HMODULE*,
 | 
				
			||||||
@ -171,6 +194,7 @@ struct sigar_t {
 | 
				
			|||||||
    LPGETUDPTABLE get_udp_table;
 | 
					    LPGETUDPTABLE get_udp_table;
 | 
				
			||||||
    LPGETUDPEXTABLE get_udpx_table;
 | 
					    LPGETUDPEXTABLE get_udpx_table;
 | 
				
			||||||
    LPNETPARAMS get_net_params;
 | 
					    LPNETPARAMS get_net_params;
 | 
				
			||||||
 | 
					    LPADAPTERSINFO get_adapters_info;
 | 
				
			||||||
    LPSYSINFO get_ntsys_info;
 | 
					    LPSYSINFO get_ntsys_info;
 | 
				
			||||||
    LPENUMMODULES enum_modules;
 | 
					    LPENUMMODULES enum_modules;
 | 
				
			||||||
    LPGETMODULENAME get_module_name;
 | 
					    LPGETMODULENAME get_module_name;
 | 
				
			||||||
 | 
				
			|||||||
@ -227,6 +227,8 @@ int sigar_os_open(sigar_t **sigar)
 | 
				
			|||||||
                                            "UdpExTableFromStack");
 | 
					                                            "UdpExTableFromStack");
 | 
				
			||||||
        (*sigar)->get_net_params =
 | 
					        (*sigar)->get_net_params =
 | 
				
			||||||
            (LPNETPARAMS)GetProcAddress(h, "GetNetworkParams");
 | 
					            (LPNETPARAMS)GetProcAddress(h, "GetNetworkParams");
 | 
				
			||||||
 | 
					        (*sigar)->get_adapters_info =
 | 
				
			||||||
 | 
					            (LPADAPTERSINFO)GetProcAddress(h, "GetAdaptersInfo");
 | 
				
			||||||
        (*sigar)->ip_handle = h;
 | 
					        (*sigar)->ip_handle = h;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
@ -1633,6 +1635,43 @@ SIGAR_DECLARE(int) sigar_net_info_get(sigar_t *sigar,
 | 
				
			|||||||
                      ip->IpAddress.String);
 | 
					                      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;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user