Start to alter print output so it correctly simulates the MS 'route
print'
Modified: trunk/reactos/apps/utils/net/route/route.c
_____
Modified: trunk/reactos/apps/utils/net/route/route.c
--- trunk/reactos/apps/utils/net/route/route.c 2005-10-01 15:30:25 UTC
(rev 18192)
+++ trunk/reactos/apps/utils/net/route/route.c 2005-10-01 15:47:40 UTC
(rev 18193)
@@ -15,86 +15,116 @@
#include <windows.h>
#include <iphlpapi.h>
#include <winsock2.h>
+#include <tchar.h>
#define IPBUF 17
#define IN_ADDR_OF(x) *((struct in_addr *)&(x))
-int usage() {
+int usage()
+{
fprintf( stderr,
- "route usage:\n"
- "route print\n"
- " prints the route table\n"
- "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
- " adds a route\n"
- "route delete <target> <gw>\n"
- " deletes a route\n" );
+ "route usage:\n"
+ "route print\n"
+ " prints the route table\n"
+ "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
+ " adds a route\n"
+ "route delete <target> <gw>\n"
+ " deletes a route\n" );
return 1;
}
-int print_routes() {
+int print_routes()
+{
PMIB_IPFORWARDTABLE IpForwardTable = NULL;
+ PIP_ADAPTER_INFO pAdapterInfo = NULL;
DWORD Error;
ULONG Size = 0;
+ ULONG adaptOutBufLen;
+ TCHAR DefGate[16];
char Destination[IPBUF], Gateway[IPBUF], Netmask[IPBUF];
unsigned int i;
- if( (Error = GetIpForwardTable( NULL, &Size, TRUE )) ==
- ERROR_INSUFFICIENT_BUFFER ) {
- IpForwardTable = malloc( Size );
- Error = GetIpForwardTable( IpForwardTable, &Size, TRUE );
- }
+ /* set required buffer size */
+ pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO)
);
+ if (GetAdaptersInfo( pAdapterInfo, &adaptOutBufLen) ==
ERROR_INSUFFICIENT_BUFFER)
+ pAdapterInfo = (IP_ADAPTER_INFO *) malloc (adaptOutBufLen);
- if( Error == ERROR_SUCCESS ) {
- printf( "%-16s%-16s%-16s%-10s%-10s\n",
- "Destination",
- "Netmask",
- "Gateway",
- "Index",
- "Metric" );
- for( i = 0; i < IpForwardTable->dwNumEntries; i++ ) {
- strcpy( Destination,
- inet_ntoa( IN_ADDR_OF(IpForwardTable->table[i].
- dwForwardDest) ) );
- strcpy( Netmask,
- inet_ntoa( IN_ADDR_OF(IpForwardTable->table[i].
- dwForwardMask) ) );
- strcpy( Gateway,
- inet_ntoa( IN_ADDR_OF(IpForwardTable->table[i].
- dwForwardNextHop) ) );
+ if( (GetIpForwardTable( NULL, &Size, TRUE )) ==
ERROR_INSUFFICIENT_BUFFER )
+ IpForwardTable = malloc( Size );
- printf( "%-16s%-16s%-16s%-10ld%-10ld\n",
- Destination,
- Netmask,
- Gateway,
- IpForwardTable->table[i].dwForwardIfIndex,
- IpForwardTable->table[i].dwForwardMetric1 );
- }
+ if ((GetAdaptersInfo(pAdapterInfo, &adaptOutBufLen) == NO_ERROR) &&
+ GetIpForwardTable( IpForwardTable, &Size, TRUE ) == NO_ERROR)
+ {
+ _tcsncpy(DefGate, pAdapterInfo->GatewayList.IpAddress.String,
16);
+
_tprintf(_T("===========================================================
================\n"));
+ _tprintf(_T("Interface List\n"));
+ while (pAdapterInfo)
+ {
+ _tprintf(_T("0x%lu ........................... %s\n"),
pAdapterInfo->Index, pAdapterInfo->Description);
+ pAdapterInfo = pAdapterInfo->Next;
+ }
+
_tprintf(_T("===========================================================
================\n"));
- free( IpForwardTable );
+
_tprintf(_T("===========================================================
================\n"));
+ _tprintf(_T("Active Routes:\n"));
+ printf( "%-27s%-17s%-14s%-11s%-10s\n",
+ "Network Destination",
+ "Netmask",
+ "Gateway",
+ "Interface",
+ "Metric" );
+ for( i = 0; i < IpForwardTable->dwNumEntries; i++ )
+ {
+ strcpy( Destination, inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardDest) ) );
+ strcpy( Netmask, inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardMask) ) );
+ strcpy( Gateway, inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardNextHop) ) );
- return ERROR_SUCCESS;
- } else {
- fprintf( stderr, "Route enumerate failed\n" );
- return Error;
+ printf( "%17s%17s%17s%16ld%9ld\n",
+ Destination,
+ Netmask,
+ Gateway,
+ IpForwardTable->table[i].dwForwardIfIndex,
+ IpForwardTable->table[i].dwForwardMetric1 );
+ }
+ _tprintf(_T("Default Gateway:%18s\n"), DefGate);
+
_tprintf(_T("===========================================================
================\n"));
+ _tprintf(_T("Persistent Routes:\n"));
+
+ free( IpForwardTable );
+
+ return ERROR_SUCCESS;
}
+ else
+ {
+ fprintf( stderr, "Route enumerate failed\n" );
+ return Error;
+ }
}
int convert_add_cmd_line( PMIB_IPFORWARDROW RowToAdd,
- int argc, char **argv ) {
+ int argc, char **argv ) {
int i;
- if( argc > 1 ) RowToAdd->dwForwardDest = inet_addr( argv[0] );
- else return FALSE;
- for( i = 1; i < argc; i++ ) {
- if( !strcasecmp( argv[i], "mask" ) ) {
- i++; if( i >= argc ) return FALSE;
- RowToAdd->dwForwardMask = inet_addr( argv[i] );
- } else if( !strcasecmp( argv[i], "metric" ) ) {
- i++; if( i >= argc ) return FALSE;
- RowToAdd->dwForwardMetric1 = atoi( argv[i] );
- } else {
- RowToAdd->dwForwardNextHop = inet_addr( argv[i] );
- }
+ if( argc > 1 )
+ RowToAdd->dwForwardDest = inet_addr( argv[0] );
+ else
+ return FALSE;
+ for( i = 1; i < argc; i++ )
+ {
+ if( !strcasecmp( argv[i], "mask" ) )
+ {
+ i++; if( i >= argc ) return FALSE;
+ RowToAdd->dwForwardMask = inet_addr( argv[i] );
+ }
+ else if( !strcasecmp( argv[i], "metric" ) )
+ {
+ i++;
+ if( i >= argc )
+ return FALSE;
+ RowToAdd->dwForwardMetric1 = atoi( argv[i] );
+ }
+ else
+ RowToAdd->dwForwardNextHop = inet_addr( argv[i] );
}
return TRUE;
@@ -104,53 +134,60 @@
MIB_IPFORWARDROW RowToAdd = { 0 };
DWORD Error;
- if( argc < 2 || !convert_add_cmd_line( &RowToAdd, argc, argv ) ) {
- fprintf( stderr,
- "route add usage:\n"
- "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
- " Adds a route to the IP route table.\n"
- " <target> is the network or host to add a route
to.\n"
- " <mask> is the netmask to use (autodetected if
unspecified)\n"
- " <gw> is the gateway to use to access the
network\n"
- " <m> is the metric to use (lower is
preferred)\n" );
- return 1;
+ if( argc < 2 || !convert_add_cmd_line( &RowToAdd, argc, argv ) )
+ {
+ fprintf( stderr,
+ "route add usage:\n"
+ "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
+ " Adds a route to the IP route table.\n"
+ " <target> is the network or host to add a route to.\n"
+ " <mask> is the netmask to use (autodetected if
unspecified)\n"
+ " <gw> is the gateway to use to access the network\n"
+ " <m> is the metric to use (lower is preferred)\n" );
+ return 1;
}
if( (Error = CreateIpForwardEntry( &RowToAdd )) == ERROR_SUCCESS )
- return 0;
+ return 0;
fprintf( stderr, "Route addition failed\n" );
return Error;
}
-int del_route( int argc, char **argv ) {
+int del_route( int argc, char **argv )
+{
MIB_IPFORWARDROW RowToDel = { 0 };
DWORD Error;
- if( argc < 2 || !convert_add_cmd_line( &RowToDel, argc, argv ) ) {
- fprintf( stderr,
- "route delete usage:\n"
- "route delete <target> <gw>\n"
- " Removes a route from the IP route table.\n"
- " <target> is the network or host to add a route
to.\n"
- " <gw> is the gateway to remove the route from.\n"
);
- return 1;
+ if( argc < 2 || !convert_add_cmd_line( &RowToDel, argc, argv ) )
+ {
+ fprintf( stderr,
+ "route delete usage:\n"
+ "route delete <target> <gw>\n"
+ " Removes a route from the IP route table.\n"
+ " <target> is the network or host to add a route to.\n"
+ " <gw> is the gateway to remove the route from.\n" );
+ return 1;
}
if( (Error = DeleteIpForwardEntry( &RowToDel )) == ERROR_SUCCESS )
- return 0;
+ return 0;
fprintf( stderr, "Route addition failed\n" );
return Error;
}
-int main( int argc, char **argv ) {
- if( argc < 2 ) return usage();
- else if( !strcasecmp( argv[1], "print" ) )
- return print_routes();
+int main( int argc, char **argv )
+{
+
+ if( argc < 2 )
+ return usage();
+ else if ( !strcasecmp( argv[1], "print" ) )
+ return print_routes();
else if( !strcasecmp( argv[1], "add" ) )
- return add_route( argc-2, argv+2 );
+ return add_route( argc-2, argv+2 );
else if( !strcasecmp( argv[1], "delete" ) )
- return del_route( argc-2, argv+2 );
- else return usage();
+ return del_route( argc-2, argv+2 );
+ else
+ return usage();
}