Commit in reactos/apps/utils/net/route on MAIN
makefile+17added 1.1
route.c+157added 1.1
route.rc+7added 1.1
+181
3 added files
Added simple route utility that uses iphlpapi to change the route table.

reactos/apps/utils/net/route
makefile added at 1.1
diff -N makefile
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ makefile	26 Nov 2004 06:51:47 -0000	1.1
@@ -0,0 +1,17 @@
+PATH_TO_TOP = ../../../..
+
+TARGET_TYPE = program
+
+TARGET_APPTYPE = console
+
+TARGET_NAME = route
+
+TARGET_SDKLIBS = ws2_32.a iphlpapi.a ntdll.a
+
+TARGET_OBJECTS = $(TARGET_NAME).o
+
+TARGET_GCCLIBS = 
+
+include $(PATH_TO_TOP)/rules.mak
+
+include $(TOOLS_PATH)/helper.mk

reactos/apps/utils/net/route
route.c added at 1.1
diff -N route.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ route.c	26 Nov 2004 06:51:47 -0000	1.1
@@ -0,0 +1,157 @@
+/* Poor man's route
+ *
+ * Supported commands:
+ *
+ * "print"
+ * "add" target ["mask" mask] gw ["metric" metric]
+ * "delete" target gw
+ *
+ * Goals:
+ *
+ * Flexible, simple
+ */
+
+#include <stdio.h>
+#include <windows.h>
+#include <iphlpapi.h>
+#include <winsock2.h>
+
+#define IPBUF 17
+#define IN_ADDR_OF(x) *((struct in_addr *)&(x))
+
+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" );
+    return 1;
+}
+
+int print_routes() {
+    PMIB_IPFORWARDTABLE IpForwardTable;
+    DWORD Error;
+    ULONG Size = 0;
+    char Destination[IPBUF], Gateway[IPBUF], Netmask[IPBUF], 
+	Index[IPBUF], Metric[IPBUF];
+    int i;
+
+    if( (Error = GetIpForwardTable( NULL, &Size, TRUE )) ==
+    	ERROR_INSUFFICIENT_BUFFER ) {
+	IpForwardTable = malloc( Size );
+	Error = GetIpForwardTable( IpForwardTable, &Size, TRUE );
+    }
+
+    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) ) );
+
+	    printf( "%-16s%-16s%-16s%-10d%-10d\n", 
+		    Destination,
+		    Netmask,
+		    Gateway,
+		    IpForwardTable->table[i].dwForwardIfIndex,
+		    IpForwardTable->table[i].dwForwardMetric1 );
+	}
+
+	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 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;
+}
+
+int add_route( int argc, char **argv ) {
+    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( (Error = CreateIpForwardEntry( &RowToAdd )) == ERROR_SUCCESS ) 
+	return 0;
+    
+    fprintf( stderr, "Route addition failed\n" );
+    return Error;
+}
+
+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( (Error = DeleteIpForwardEntry( &RowToDel )) == ERROR_SUCCESS ) 
+	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();
+    else if( !strcasecmp( argv[1], "add" ) ) 
+	return add_route( argc-2, argv+2 );
+    else if( !strcasecmp( argv[1], "delete" ) ) 
+	return del_route( argc-2, argv+2 );
+    else return usage();
+}

reactos/apps/utils/net/route
route.rc added at 1.1
diff -N route.rc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ route.rc	26 Nov 2004 06:51:47 -0000	1.1
@@ -0,0 +1,7 @@
+/* $Id: route.rc,v 1.1 2004/11/26 06:51:47 arty Exp $ */
+
+#define REACTOS_STR_FILE_DESCRIPTION	"ReactOS TCP/IPv4 Win32 Route\0"
+#define REACTOS_STR_INTERNAL_NAME	"route\0"
+#define REACTOS_STR_ORIGINAL_FILENAME	"route.exe\0"
+#define REACTOS_STR_ORIGINAL_COPYRIGHT	"Art Yerkes (arty@users.sourceforge.net)\0"
+#include <reactos/version.rc>
CVSspam 0.2.8