if( strcmp(argv[1], "route") == 0 )
{
// Add new route
- if( strcmp(argv[2], "add") == 0 )
+ if( argc > 2 && strcmp(argv[2], "add") == 0 )
{
uint8_t dest[16] = {0};
uint8_t nextHop[16] = {0};
int addrType, subnetBits = -1;
int nextHopType, nextHopBits=-1;
- char *ifaceName;
+ char *ifaceName = NULL;
int metric = DEFAULT_METRIC;
// Usage:
// ifconfig route add <host>[/<prefix>] <interface> [<metric>]
return 0;
}
// Delete a route
- else if( strcmp(argv[2], "del") == 0 )
+ else if( argc > 2 && strcmp(argv[2], "del") == 0 )
{
// Usage:
// ifconfig route del <routenum>
fprintf(stderr, " %s [<interface>]\n", ProgName);
fprintf(stderr, " Print the current interfaces (or only <interface> if passed)\n");
fprintf(stderr, "\n");
- fprintf(stderr, " %s routes\n", ProgName);
+ fprintf(stderr, " %s route\n", ProgName);
fprintf(stderr, " Print the routing tables\n");
- fprintf(stderr, " %s routes add <host>[/<prefix>] [<nexthop> OR <iface>] [<metric>]\n", ProgName);
+ fprintf(stderr, " %s route add <host>[/<prefix>] [<nexthop> OR <iface>] [<metric>]\n", ProgName);
fprintf(stderr, " Add a new route\n");
- fprintf(stderr, " %s routes del <host>[/<prefix>]\n", ProgName);
- fprintf(stderr, " %s routes del <routenum>\n", ProgName);
+ fprintf(stderr, " %s route del <host>[/<prefix>]\n", ProgName);
+ fprintf(stderr, " %s route del <routenum>\n", ProgName);
fprintf(stderr, " Add a new route\n");
fprintf(stderr, "\n");
fprintf(stderr, "A note on Acess's IP Stack:\n");
dp = open(IPSTACK_ROOT"/routes", OPENFLAG_READ);
+ printf("ID\tType\tNetwork \tGateway \tMetric\tIFace\n");
+
while( readdir(dp, filename) )
{
if(filename[0] == '.') continue;
return ;
}
- printf("%s:\t", Name);
- {
- int call_num = ioctl(fd, 3, "get_interface");
- int len = ioctl(fd, call_num, NULL);
- char *buf = malloc(len+1);
- ioctl(fd, call_num, buf);
- printf("'%s'\t", buf);
- free(buf);
- }
+ // Number
+ printf("%s\t", Name);
// Get the address type
switch(type)
{
uint8_t net[4], addr[4];
int subnet, metric;
- printf("IPv4\n");
+ printf("IPv4\t");
ioctl(fd, ioctl(fd, 3, "get_network"), net); // Get Network
ioctl(fd, ioctl(fd, 3, "get_nexthop"), addr); // Get Gateway/NextHop
subnet = ioctl(fd, ioctl(fd, 3, "getset_subnetbits"), NULL); // Get Subnet Bits
metric = ioctl(fd, ioctl(fd, 3, "getset_metric"), NULL); // Get Subnet Bits
- printf("\tNetwork: %s/%i\n", Net_PrintAddress(4, net), subnet);
- printf("\tGateway: %s\n", Net_PrintAddress(4, addr));
- printf("\tMetric: %i\n", metric);
+ printf("%s/%i\t", Net_PrintAddress(4, net), subnet);
+ printf("%s \t", Net_PrintAddress(4, addr));
+ printf("%i\t", metric);
}
break;
case 6: // IPv6
{
uint16_t net[8], addr[8];
int subnet, metric;
- printf("IPv6\n");
+ printf("IPv6\t");
ioctl(fd, ioctl(fd, 3, "get_network"), net); // Get Network
ioctl(fd, ioctl(fd, 3, "get_nexthop"), addr); // Get Gateway/NextHop
subnet = ioctl(fd, ioctl(fd, 3, "getset_subnetbits"), NULL); // Get Subnet Bits
metric = ioctl(fd, ioctl(fd, 3, "getset_metric"), NULL); // Get Subnet Bits
- printf("\tNetwork: %s/%i\n", Net_PrintAddress(6, net), subnet);
- printf("\tGateway: %s\n", Net_PrintAddress(6, addr));
- printf("\tMetric: %i\n", metric);
+ printf("%s/%i\t", Net_PrintAddress(6, net), subnet);
+ printf("%s\t", Net_PrintAddress(6, addr));
+ printf("%i\t", metric);
}
break;
default: // Unknow
printf("UNKNOWN (%i)\n", type);
break;
}
+
+ // Interface
+ {
+ int call_num = ioctl(fd, 3, "get_interface");
+ int len = ioctl(fd, call_num, NULL);
+ char *buf = malloc(len+1);
+ ioctl(fd, call_num, buf);
+ printf("'%s'\t", buf);
+ free(buf);
+ }
+
printf("\n");
close(fd);