diff --git a/programs/ipconfig/En.rc b/programs/ipconfig/En.rc index 6606fe4402d..97fb22375e6 100644 --- a/programs/ipconfig/En.rc +++ b/programs/ipconfig/En.rc @@ -44,4 +44,5 @@ STRINGTABLE STRING_DHCP_ENABLED, "DHCP enabled" STRING_YES, "Yes" STRING_NO, "No" + STRING_DEFAULT_GATEWAY, "Default gateway" } diff --git a/programs/ipconfig/ipconfig.c b/programs/ipconfig/ipconfig.c index bf186c135a0..e76b549d5d3 100644 --- a/programs/ipconfig/ipconfig.c +++ b/programs/ipconfig/ipconfig.c @@ -130,6 +130,17 @@ static void print_field(int msg, const WCHAR *value) ipconfig_printfW(formatW, field, value); } +static void print_value(const WCHAR *value) +{ + static const WCHAR formatW[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + '%','s','\n',0}; + + ipconfig_printfW(formatW, value); +} + static BOOL socket_address_to_string(WCHAR *buf, DWORD len, SOCKET_ADDRESS *addr) { return WSAAddressToStringW(addr->lpSockaddr, @@ -155,8 +166,10 @@ static void print_basic_information(void) for (p = adapters; p; p = p->Next) { static const WCHAR newlineW[] = {'\n',0}; + static const WCHAR emptyW[] = {0}; IP_ADAPTER_UNICAST_ADDRESS *addr; + IP_ADAPTER_GATEWAY_ADDRESS_LH *gateway; WCHAR addr_buf[54]; ipconfig_message_printfW(STRING_ADAPTER_FRIENDLY, iftype_to_string(p->IfType), p->FriendlyName); @@ -170,7 +183,20 @@ static void print_basic_information(void) /* FIXME: Output corresponding subnet mask. */ } - /* FIXME: Output default gateway address. */ + if (p->FirstGatewayAddress) + { + if (socket_address_to_string(addr_buf, sizeof(addr_buf)/sizeof(WCHAR), &p->FirstGatewayAddress->Address)) + print_field(STRING_DEFAULT_GATEWAY, addr_buf); + + for (gateway = p->FirstGatewayAddress->Next; gateway; gateway = gateway->Next) + { + if (socket_address_to_string(addr_buf, sizeof(addr_buf)/sizeof(WCHAR), &gateway->Address)) + print_value(addr_buf); + } + } + else + print_field(STRING_DEFAULT_GATEWAY, emptyW); + ipconfig_printfW(newlineW); } } @@ -245,6 +271,7 @@ static const WCHAR *boolean_to_string(int value) static void print_full_information(void) { static const WCHAR newlineW[] = {'\n',0}; + static const WCHAR emptyW[] = {0}; FIXED_INFO *info; IP_ADAPTER_ADDRESSES *adapters; @@ -290,6 +317,7 @@ static void print_full_information(void) { IP_ADAPTER_UNICAST_ADDRESS *addr; WCHAR physaddr_buf[3 * MAX_ADAPTER_ADDRESS_LENGTH]; + IP_ADAPTER_GATEWAY_ADDRESS_LH *gateway; WCHAR addr_buf[54]; ipconfig_message_printfW(STRING_ADAPTER_FRIENDLY, iftype_to_string(p->IfType), p->FriendlyName); @@ -308,7 +336,19 @@ static void print_full_information(void) /* FIXME: Output corresponding subnet mask. */ } - /* FIXME: Output default gateway address. */ + if (p->FirstGatewayAddress) + { + if (socket_address_to_string(addr_buf, sizeof(addr_buf)/sizeof(WCHAR), &p->FirstGatewayAddress->Address)) + print_field(STRING_DEFAULT_GATEWAY, addr_buf); + + for (gateway = p->FirstGatewayAddress->Next; gateway; gateway = gateway->Next) + { + if (socket_address_to_string(addr_buf, sizeof(addr_buf)/sizeof(WCHAR), &gateway->Address)) + print_value(addr_buf); + } + } + else + print_field(STRING_DEFAULT_GATEWAY, emptyW); ipconfig_printfW(newlineW); } diff --git a/programs/ipconfig/ipconfig.h b/programs/ipconfig/ipconfig.h index d20900682ab..593a43c0c82 100644 --- a/programs/ipconfig/ipconfig.h +++ b/programs/ipconfig/ipconfig.h @@ -40,3 +40,4 @@ #define STRING_DHCP_ENABLED 117 #define STRING_YES 118 #define STRING_NO 119 +#define STRING_DEFAULT_GATEWAY 120