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