X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Fping_src%2Fmain.c;h=7c10e57be93477f9cc034cd0bdf94d722d025000;hb=be5123fe1f4aa66b76ce8ef589362ad21b6bbf72;hp=4c8c84de574bc14b8dd58e19d2e0f83d5c846eb7;hpb=e6eafcb86732068e2094f04a2452098c13256336;p=tpg%2Facess2.git diff --git a/Usermode/Applications/ping_src/main.c b/Usermode/Applications/ping_src/main.c index 4c8c84de..7c10e57b 100644 --- a/Usermode/Applications/ping_src/main.c +++ b/Usermode/Applications/ping_src/main.c @@ -1,5 +1,5 @@ /* - * Acess2 IFCONFIG command + * Acess2 ping command */ #include #include @@ -14,7 +14,6 @@ // === PROTOTYPES === void PrintUsage(char *ProgName); void PrintHelp(char *ProgName); - int GetAddress( char *Address, uint8_t *Addr ); // === GLOBALS === int giNumberOfPings = 1; @@ -81,19 +80,7 @@ int main(int argc, char *argv[]) return 1; } - if( !iface ) - { - 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); - } - + if( iface ) { char *_iface = malloc( sizeof("/Devices/ip/") + strlen(iface) + 1 ); strcpy(_iface, "/Devices/ip/"); @@ -101,15 +88,25 @@ int main(int argc, char *argv[]) free(iface); // TODO: Handle when this is not heap iface = _iface; printf("iface = '%s'\n", iface); + fd = _SysOpen(iface, OPENFLAG_EXEC); + if(fd == -1) { + fprintf(stderr, "ERROR: Unable to open interface '%s'\n", iface); + return 1; + } + } - - fd = open(iface, OPENFLAG_EXEC); - if(fd == -1) { - fprintf(stderr, "ERROR: Unable to open interface '%s'\n", iface); - return 1; + else + { + fd = Net_OpenSocket(type, addr, NULL); + if( fd == -1 ) { + fprintf(stderr, "Unable to find a route to '%s'\n", + Net_PrintAddress(type, addr) + ); + return -1; + } } - - call = ioctl(fd, 3, "ping"); + + call = _SysIOCtl(fd, 3, "ping"); if(call == 0) { fprintf(stderr, "ERROR: '%s' does not have a 'ping' call\n", iface); return 1; @@ -117,11 +114,11 @@ int main(int argc, char *argv[]) for( i = 0; i < giNumberOfPings; i ++ ) { - ping = ioctl(fd, call, addr); + ping = _SysIOCtl(fd, call, addr); printf("ping = %i\n", ping); } - close(fd); + _SysClose(fd); return 0; } @@ -137,127 +134,3 @@ void PrintHelp(char *ProgName) fprintf(stderr, " -h\tPrint this message\n"); } -/** - * \brief Read an IPv4 Address - */ -int GetAddress4(char *String, uint8_t *Addr) -{ - int i = 0; - int j; - int val; - - for( j = 0; String[i] && j < 4; j ++ ) - { - val = 0; - for( ; String[i] && String[i] != '.'; i++ ) - { - if('0' > String[i] || String[i] > '9') { - printf("0 255) { - printf("val > 255 (%i)\n", val); - return 0; - } - Addr[j] = val; - - if(String[i] == '.') - i ++; - } - if( j != 4 ) { - printf("4 parts expected, %i found\n", j); - return 0; - } - if(String[i] != '\0') { - printf("EOS != '\\0', '%c'\n", String[i]); - return 0; - } - return 1; -} - -/** - * \brief Read an IPv6 Address - */ -int GetAddress6(char *String, uint8_t *Addr) -{ - int i = 0; - int j, k; - int val, split = -1, end; - uint16_t hi[8], low[8]; - - for( j = 0; String[i] && j < 8; j ++ ) - { - if(String[i] == ':') { - if(split != -1) { - printf("Two '::'s\n"); - return 0; - } - split = j; - i ++; - continue; - } - - val = 0; - for( k = 0; String[i] && String[i] != ':'; i++, k++ ) - { - val *= 16; - if('0' <= String[i] && String[i] <= '9') - val += String[i] - '0'; - else if('A' <= String[i] && String[i] <= 'F') - val += String[i] - 'A' + 10; - else if('a' <= String[i] && String[i] <= 'f') - val += String[i] - 'a' + 10; - else { - printf("%c unexpected\n", String[i]); - return 0; - } - } - - if(val > 0xFFFF) { - printf("val (0x%x) > 0xFFFF\n", val); - return 0; - } - - if(split == -1) - hi[j] = val; - else - low[j-split] = val; - - if( String[i] == ':' ) { - i ++; - } - } - end = j; - - for( j = 0; j < split; j ++ ) - { - Addr[j*2] = hi[j]>>8; - Addr[j*2+1] = hi[j]&0xFF; - } - for( ; j < 8 - (end - split); j++ ) - { - Addr[j*2] = 0; - Addr[j*2+1] = 0; - } - k = 0; - for( ; j < 8; j ++, k++) - { - Addr[j*2] = hi[k]>>8; - Addr[j*2+1] = hi[k]&0xFF; - } - - return 1; -} - -int GetAddress(char *String, uint8_t *Addr) -{ - if( GetAddress4(String, Addr) ) - return 4; - - if( GetAddress6(String, Addr) ) - return 6; - - return 0; -}