Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/app/ping/ping.c

    raadf01e r4be390b  
    6363 *  @returns EOK on success.
    6464 */
    65 int main(int argc, char * argv[]);
     65int             main( int argc, char * argv[] );
    6666
    6767/** Prints the application help.
    6868 */
    69 void print_help(void);
     69void    print_help( void );
    7070
    7171/** Translates the character string to the address family number.
     
    7474 *  @returns EAFNOSUPPORTED if the address family is not supported.
    7575 */
    76 int parse_address_family(const char * name);
    77 
    78 void print_help(void){
     76int             parse_address_family( const char * name );
     77
     78void print_help( void ){
    7979        printf(
    8080                "Network Ping aplication\n" \
     
    111111}
    112112
    113 int parse_address_family(const char * name){
    114         if(str_lcmp(name, "AF_INET", 7) == 0){
     113int parse_address_family( const char * name ){
     114        if( str_lcmp( name, "AF_INET", 7 ) == 0 ){
    115115                return AF_INET;
    116         }else if(str_lcmp(name, "AF_INET6", 8) == 0){
     116        }else if( str_lcmp( name, "AF_INET6", 8 ) == 0 ){
    117117                return AF_INET6;
    118118        }
     
    120120}
    121121
    122 int main(int argc, char * argv[]){
     122int main( int argc, char * argv[] ){
    123123        ERROR_DECLARE;
    124124
    125         size_t size                     = 38;
    126         int verbose                     = 0;
    127         int dont_fragment       = 0;
    128         ip_ttl_t ttl                            = 0;
    129         ip_tos_t tos                            = 0;
    130         int count                       = 3;
    131         suseconds_t timeout                     = 3000;
    132         int family                      = AF_INET;
    133 
    134         socklen_t max_length            = sizeof(struct sockaddr_in6);
    135         uint8_t address_data[max_length];
    136         struct sockaddr * address               = (struct sockaddr *) address_data;
    137         struct sockaddr_in * address_in         = (struct sockaddr_in *) address;
    138         struct sockaddr_in6 * address_in6       = (struct sockaddr_in6 *) address;
    139         socklen_t addrlen;
    140         char address_string[INET6_ADDRSTRLEN];
    141         uint8_t * address_start;
    142         int icmp_phone;
    143         struct timeval time_before;
    144         struct timeval time_after;
    145         int result;
    146         int value;
    147         int index;
    148 
    149         printf("Task %d - ", task_get_id());
    150         printf("%s\n", NAME);
    151 
    152         if(argc <= 1){
     125        size_t                          size                    = 38;
     126        int                                     verbose                 = 0;
     127        int                                     dont_fragment   = 0;
     128        ip_ttl_t                        ttl                             = 0;
     129        ip_tos_t                        tos                             = 0;
     130        int                                     count                   = 3;
     131        suseconds_t                     timeout                 = 3000;
     132        int                                     family                  = AF_INET;
     133
     134        socklen_t                       max_length              = sizeof( struct sockaddr_in6 );
     135        uint8_t                         address_data[ max_length ];
     136        struct sockaddr *               address         = ( struct sockaddr * ) address_data;
     137        struct sockaddr_in *    address_in              = ( struct sockaddr_in * ) address;
     138        struct sockaddr_in6 *   address_in6     = ( struct sockaddr_in6 * ) address;
     139        socklen_t                       addrlen;
     140        char                            address_string[ INET6_ADDRSTRLEN ];
     141        uint8_t *                       address_start;
     142        int                                     icmp_phone;
     143        struct timeval          time_before;
     144        struct timeval          time_after;
     145        int                                     result;
     146        int                                     value;
     147        int                                     index;
     148
     149        printf( "Task %d - ", task_get_id());
     150        printf( "%s\n", NAME );
     151
     152        if( argc <= 1 ){
    153153                print_help();
    154154                return EINVAL;
    155155        }
    156156
    157         for(index = 1; (index < argc - 1) || ((index == argc) && (argv[index][0] == '-')); ++ index){
    158                 if(argv[index][0] == '-'){
    159                         switch(argv[index][1]){
    160                                 case 'c':
    161                                         ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &count, "count", 0));
    162                                         break;
    163                                 case 'f':
    164                                         ERROR_PROPAGATE(parse_parameter_name_int(argc, argv, &index, &family, "address family", 0, parse_address_family));
    165                                         break;
    166                                 case 'h':
    167                                         print_help();
    168                                         return EOK;
    169                                         break;
    170                                 case 's':
    171                                         ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &value, "packet size", 0));
    172                                         size = (value >= 0) ? (size_t) value : 0;
    173                                         break;
    174                                 case 't':
    175                                         ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &value, "timeout", 0));
    176                                         timeout = (value >= 0) ? (suseconds_t) value : 0;
    177                                         break;
    178                                 case 'v':
    179                                         verbose = 1;
    180                                         break;
    181                                 case '-':
    182                                         if(str_lcmp(argv[index] + 2, "count=", 6) == 0){
    183                                                 ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &count, "received count", 8));
    184                                         }else if(str_lcmp(argv[index] + 2, "dont_fragment", 13) == 0){
    185                                                 dont_fragment = 1;
    186                                         }else if(str_lcmp(argv[index] + 2, "family=", 7) == 0){
    187                                                 ERROR_PROPAGATE(parse_parameter_name_int(argc, argv, &index, &family, "address family", 9, parse_address_family));
    188                                         }else if(str_lcmp(argv[index] + 2, "help", 5) == 0){
    189                                                 print_help();
    190                                                 return EOK;
    191                                         }else if(str_lcmp(argv[index] + 2, "size=", 5) == 0){
    192                                                 ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &value, "packet size", 7));
    193                                                 size = (value >= 0) ? (size_t) value : 0;
    194                                         }else if(str_lcmp(argv[index] + 2, "timeout=", 8) == 0){
    195                                                 ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &value, "timeout", 7));
    196                                                 timeout = (value >= 0) ? (suseconds_t) value : 0;
    197                                         }else if(str_lcmp(argv[index] + 2, "tos=", 4) == 0){
    198                                                 ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &value, "type of service", 7));
    199                                                 tos = (value >= 0) ? (ip_tos_t) value : 0;
    200                                         }else if(str_lcmp(argv[index] + 2, "ttl=", 4) == 0){
    201                                                 ERROR_PROPAGATE(parse_parameter_int(argc, argv, &index, &value, "time to live", 7));
    202                                                 ttl = (value >= 0) ? (ip_ttl_t) value : 0;
    203                                         }else if(str_lcmp(argv[index] + 2, "verbose", 8) == 0){
    204                                                 verbose = 1;
    205                                         }else{
    206                                                 print_unrecognized(index, argv[index] + 2);
    207                                                 print_help();
    208                                                 return EINVAL;
    209                                         }
    210                                         break;
     157        for( index = 1; ( index < argc - 1 ) || (( index == argc ) && ( argv[ index ][ 0 ] == '-' )); ++ index ){
     158                if( argv[ index ][ 0 ] == '-' ){
     159                        switch( argv[ index ][ 1 ] ){
     160                                case 'c':       ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "count", 0 ));
     161                                                        break;
     162                                case 'f':       ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & family, "address family", 0, parse_address_family ));
     163                                                        break;
     164                                case 'h':       print_help();
     165                                                        return EOK;
     166                                                        break;
     167                                case 's':       ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "packet size", 0 ));
     168                                                        size = (value >= 0 ) ? ( size_t ) value : 0;
     169                                                        break;
     170                                case 't':       ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "timeout", 0 ));
     171                                                        timeout = (value >= 0 ) ? ( suseconds_t ) value : 0;
     172                                                        break;
     173                                case 'v':       verbose = 1;
     174                                                        break;
     175                                case '-':       if( str_lcmp( argv[ index ] + 2, "count=", 6 ) == 0 ){
     176                                                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & count, "received count", 8 ));
     177                                                        }else if( str_lcmp( argv[ index ] + 2, "dont_fragment", 13 ) == 0 ){
     178                                                                dont_fragment = 1;
     179                                                        }else if( str_lcmp( argv[ index ] + 2, "family=", 7 ) == 0 ){
     180                                                                ERROR_PROPAGATE( parse_parameter_name_int( argc, argv, & index, & family, "address family", 9, parse_address_family ));
     181                                                        }else if( str_lcmp( argv[ index ] + 2, "help", 5 ) == 0 ){
     182                                                                print_help();
     183                                                                return EOK;
     184                                                        }else if( str_lcmp( argv[ index ] + 2, "size=", 5 ) == 0 ){
     185                                                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "packet size", 7 ));
     186                                                                size = (value >= 0 ) ? ( size_t ) value : 0;
     187                                                        }else if( str_lcmp( argv[ index ] + 2, "timeout=", 8 ) == 0 ){
     188                                                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "timeout", 7 ));
     189                                                                timeout = (value >= 0 ) ? ( suseconds_t ) value : 0;
     190                                                        }else if( str_lcmp( argv[ index ] + 2, "tos=", 4 ) == 0 ){
     191                                                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "type of service", 7 ));
     192                                                                tos = (value >= 0 ) ? ( ip_tos_t ) value : 0;
     193                                                        }else if( str_lcmp( argv[ index ] + 2, "ttl=", 4 ) == 0 ){
     194                                                                ERROR_PROPAGATE( parse_parameter_int( argc, argv, & index, & value, "time to live", 7 ));
     195                                                                ttl = (value >= 0 ) ? ( ip_ttl_t ) value : 0;
     196                                                        }else if( str_lcmp( argv[ index ] + 2, "verbose", 8 ) == 0 ){
     197                                                                verbose = 1;
     198                                                        }else{
     199                                                                print_unrecognized( index, argv[ index ] + 2 );
     200                                                                print_help();
     201                                                                return EINVAL;
     202                                                        }
     203                                                        break;
    211204                                default:
    212                                         print_unrecognized(index, argv[index] + 1);
     205                                        print_unrecognized( index, argv[ index ] + 1 );
    213206                                        print_help();
    214207                                        return EINVAL;
    215208                        }
    216209                }else{
    217                         print_unrecognized(index, argv[index]);
     210                        print_unrecognized( index, argv[ index ] );
    218211                        print_help();
    219212                        return EINVAL;
     
    221214        }
    222215
    223         bzero(address_data, max_length);
    224         switch(family){
     216        bzero( address_data, max_length );
     217        switch( family ){
    225218                case AF_INET:
    226219                        address_in->sin_family = AF_INET;
    227                         address_start = (uint8_t *) &address_in->sin_addr.s_addr;
    228                         addrlen = sizeof(struct sockaddr_in);
     220                        address_start = ( uint8_t * ) & address_in->sin_addr.s_addr;
     221                        addrlen = sizeof( struct sockaddr_in );
    229222                        break;
    230223                case AF_INET6:
    231224                        address_in6->sin6_family = AF_INET6;
    232                         address_start = (uint8_t *) &address_in6->sin6_addr.s6_addr;
    233                         addrlen = sizeof(struct sockaddr_in6);
     225                        address_start = ( uint8_t * ) & address_in6->sin6_addr.s6_addr;
     226                        addrlen = sizeof( struct sockaddr_in6 );
    234227                        break;
    235228                default:
    236                         fprintf(stderr, "Address family is not supported\n");
     229                        fprintf( stderr, "Address family is not supported\n" );
    237230                        return EAFNOSUPPORT;
    238231        }
    239232
    240         if(ERROR_OCCURRED(inet_pton(family, argv[argc - 1], address_start))){
    241                 fprintf(stderr, "Address parse error %d\n", ERROR_CODE);
     233        if( ERROR_OCCURRED( inet_pton( family, argv[ argc - 1 ], address_start ))){
     234                fprintf( stderr, "Address parse error %d\n", ERROR_CODE );
    242235                return ERROR_CODE;
    243236        }
    244237
    245         icmp_phone = icmp_connect_module(SERVICE_ICMP, ICMP_CONNECT_TIMEOUT);
    246         if(icmp_phone < 0){
    247                 fprintf(stderr, "ICMP connect error %d\n", icmp_phone);
     238        icmp_phone = icmp_connect_module( SERVICE_ICMP, ICMP_CONNECT_TIMEOUT );
     239        if( icmp_phone < 0 ){
     240                fprintf( stderr, "ICMP connect error %d\n", icmp_phone );
    248241                return icmp_phone;
    249242        }
    250243
    251         printf("PING %d bytes of data\n", size);
    252         if(ERROR_OCCURRED(inet_ntop(address->sa_family, address_start, address_string, sizeof(address_string)))){
    253                 fprintf(stderr, "Address error %d\n", ERROR_CODE);
     244        printf( "PING %d bytes of data\n", size );
     245        if( ERROR_OCCURRED( inet_ntop( address->sa_family, address_start, address_string, sizeof( address_string )))){
     246                fprintf( stderr, "Address error %d\n", ERROR_CODE );
    254247        }else{
    255                 printf("Address %s:\n", address_string);
    256         }
    257 
    258         while(count > 0){
    259                 if(ERROR_OCCURRED(gettimeofday(&time_before, NULL))){
    260                         fprintf(stderr, "Get time of day error %d\n", ERROR_CODE);
     248                printf( "Address %s:\n", address_string );
     249        }
     250
     251        while( count > 0 ){
     252                if( ERROR_OCCURRED( gettimeofday( & time_before, NULL ))){
     253                        fprintf( stderr, "Get time of day error %d\n", ERROR_CODE );
    261254                        return ERROR_CODE;
    262255                }
    263                 result = icmp_echo_msg(icmp_phone, size, timeout, ttl, tos, dont_fragment, address, addrlen);
    264                 if(ERROR_OCCURRED(gettimeofday(&time_after, NULL))){
    265                         fprintf(stderr, "Get time of day error %d\n", ERROR_CODE);
     256                result = icmp_echo_msg( icmp_phone, size, timeout, ttl, tos, dont_fragment, address, addrlen );
     257                if( ERROR_OCCURRED( gettimeofday( & time_after, NULL ))){
     258                        fprintf( stderr, "Get time of day error %d\n", ERROR_CODE );
    266259                        return ERROR_CODE;
    267260                }
    268                 switch(result){
     261                switch( result ){
    269262                        case ICMP_ECHO:
    270                                 printf("Ping round trip time %d miliseconds\n", tv_sub(&time_after, &time_before) / 1000);
     263                                printf( "Ping round trip time %d miliseconds\n", tv_sub( & time_after, & time_before ) / 1000 );
    271264                                break;
    272265                        case ETIMEOUT:
    273                                 printf("Timed out.\n");
     266                                printf( "Timed out.\n" );
    274267                                break;
    275268                        default:
    276                                 print_error(stdout, result, NULL, "\n");
     269                                print_error( stdout, result, NULL, "\n" );
    277270                }
    278271                -- count;
    279272        }
    280273
    281         if(verbose){
    282                 printf("Exiting\n");
    283         }
     274        if( verbose ) printf( "Exiting\n" );
    284275
    285276        return EOK;
Note: See TracChangeset for help on using the changeset viewer.