diff --git a/toolbox/route.c b/toolbox/route.c
index adf5c69..86fc35b 100644
--- a/toolbox/route.c
+++ b/toolbox/route.c
@@ -2,6 +2,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <stdarg.h>
 
 #include <errno.h>
 #include <string.h>
@@ -14,9 +15,14 @@
 #include <arpa/inet.h>
 #include <linux/route.h>
 
-static void die(const char *s)
+static void die(const char *fmt, ...)
 {
-    fprintf(stderr,"error: %s (%s)\n", s, strerror(errno));
+    va_list p;
+
+    va_start(p, fmt);
+    fprintf(stderr,"error(%s): ", strerror(errno));
+    fprintf(stderr, fmt, p);
+    va_end(p);
     exit(-1);
 }
 
@@ -36,9 +42,10 @@
 	}                                       \
 } while(0)		
 
-/* current support two kinds of usage */
+/* current support the following routing entries */
 /* route add default dev wlan0 */
 /* route add default gw 192.168.20.1 dev wlan0 */
+/* route add net 192.168.1.1 netmask 255.255.255.0 gw 172.24.192.10 */
 
 int route_main(int argc, char *argv[])
 {
@@ -68,7 +75,7 @@
 				  EXPECT_NEXT(argc, argv);
 				  rt.rt_flags = RTF_UP | RTF_HOST;
 				  rt.rt_dev = argv[0];
-				  if (ioctl(s, SIOCADDRT, &rt) < 0) die("SIOCADDRT");
+				  if (ioctl(s, SIOCADDRT, &rt) < 0) die("SIOCADDRT\n");
 				}else if(!strcmp(argv[0], "gw")) {
 				  EXPECT_NEXT(argc, argv);
 				  rt.rt_flags = RTF_UP | RTF_GATEWAY;
@@ -76,22 +83,44 @@
 				  if(isdigit(argv[0][0])){
 					init_sockaddr_in((struct sockaddr_in *)&(rt.rt_gateway), argv[0]);
 				  }else{
-					die("expecting an IP address for parameter \"gw\"");
+					die("expecting an IP address for parameter \"gw\"\n");
 				  }
 				  EXPECT_NEXT(argc, argv);
 				  if(!strcmp(argv[0], "dev")) {
 					EXPECT_NEXT(argc, argv);
 					rt.rt_dev = argv[0];
 					if (ioctl(s, SIOCADDRT, &rt) < 0){
-					  die("SIOCADDRT");
+					  die("SIOCADDRT\n");
 					}
 				  }
 				}
-			}
+			} else  {
+                          char keywords[3][5] = { "net", "mask", "gw" };
+                          struct sockaddr_in *paddr[3] = { &rt.rt_dst, &rt.rt_genmask, &rt.rt_gateway };
+                          int k = 0;
+
+                          memset((char *) &rt, 0, sizeof(struct rtentry));
+                          rt.rt_flags = RTF_UP | RTF_GATEWAY;
+                          do {
+                            if(!strcmp(argv[0], keywords[k])) {
+                              EXPECT_NEXT(argc, argv);
+                              if(isdigit(argv[0][0])) {
+                                init_sockaddr_in(paddr[k], argv[0]);
+                              } else {
+                                die("expecting an IP/MASK address for parameter %s\n", keywords[k]);
+                              }
+                              if(k < 2) EXPECT_NEXT(argc, argv);
+                            } else {
+                              die("expecting keyword(s)\n");
+                            }
+                          } while(++k < 3);
+                          if(ioctl(s, SIOCADDRT, &rt) < 0) {
+                            die("SIOCADDRT\n");
+                          }
+                        }
         }
 		ADVANCE(argc, argv);
     }
 
     return 0;
 }
-
