X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Fping_src%2Fmain.c;h=4c8c84de574bc14b8dd58e19d2e0f83d5c846eb7;hb=6f09121102883af1915387350576a7f8dd9518bc;hp=792054510b72b960b4b540d8da211eb492ac5ff3;hpb=268cff7210477842399170f18bf9cdaaa1c264c6;p=tpg%2Facess2.git diff --git a/Usermode/Applications/ping_src/main.c b/Usermode/Applications/ping_src/main.c index 79205451..4c8c84de 100644 --- a/Usermode/Applications/ping_src/main.c +++ b/Usermode/Applications/ping_src/main.c @@ -6,6 +6,7 @@ #include #include #include +#include // === CONSTANTS === #define IPSTACK_ROOT "/Devices/ip" @@ -15,6 +16,9 @@ void PrintUsage(char *ProgName); void PrintHelp(char *ProgName); int GetAddress( char *Address, uint8_t *Addr ); +// === GLOBALS === + int giNumberOfPings = 1; + // === CODE === /** * \fn int main(int argc, char *argv[]) @@ -27,6 +31,8 @@ int main(int argc, char *argv[]) int i, j; uint8_t addr[16]; int type; + + int fd, call, ping; for(i = 1; i < argc; i++) { @@ -69,7 +75,7 @@ int main(int argc, char *argv[]) } // Read Address - type = GetAddress(ipStr, addr); + type = Net_ParseAddress(ipStr, addr); if( type == 0 ) { fprintf(stderr, "Invalid IP Address\n"); return 1; @@ -77,28 +83,45 @@ int main(int argc, char *argv[]) if( !iface ) { - fprintf(stderr, "WARNING: \"All interfaces\" is currently uniplemented"); - return 2; + iface = Net_GetInterface(type, addr); + if( !iface ) { + fprintf(stderr, "Unable to find a route to '%s'\n", + Net_PrintAddress(type, addr) + ); + return -1; + } + + printf("iface = '%s'\n", iface); } - else + { - int fd = open(iface, OPENFLAG_EXEC); - int call, ping; - if(fd == -1) { - fprintf(stderr, "ERROR: Unable to open interface '%s'\n", iface); - return 1; - } + char *_iface = malloc( sizeof("/Devices/ip/") + strlen(iface) + 1 ); + strcpy(_iface, "/Devices/ip/"); + strcat(_iface, iface); + free(iface); // TODO: Handle when this is not heap + iface = _iface; + printf("iface = '%s'\n", iface); + } + + fd = open(iface, OPENFLAG_EXEC); + if(fd == -1) { + fprintf(stderr, "ERROR: Unable to open interface '%s'\n", iface); + return 1; + } - call = ioctl(fd, 3, "ping"); - if(call == 0) { - fprintf(stderr, "ERROR: '%s' does not have a 'ping' call\n", iface); - return 1; - } + call = ioctl(fd, 3, "ping"); + if(call == 0) { + fprintf(stderr, "ERROR: '%s' does not have a 'ping' call\n", iface); + return 1; + } + + for( i = 0; i < giNumberOfPings; i ++ ) + { ping = ioctl(fd, call, addr); - printf("ping = %i\n"); - - close(fd); + printf("ping = %i\n", ping); } + + close(fd); return 0; }