static void fapp_set_cmd_tftp(fnet_shell_desc_t desc, char *value ) { struct sockaddr s_addr; if(fnet_inet_ptos(value, &s_addr) == FNET_ERR) { fnet_shell_println(desc, FAPP_PARAM_ERR, value); /* Print error. */ } fapp_params_tftp_config.server_addr = s_addr; }
/************************************************************************ * NAME: fapp_benchrx_cmd * * DESCRIPTION: Start RX Benchmark server. ************************************************************************/ void fapp_benchrx_cmd( fnet_shell_desc_t desc, int argc, char ** argv ) { fnet_address_family_t family; family = AF_SUPPORTED; /* TCP */ if((argc == 1)||(argc == 2 && fnet_strcasecmp("tcp", argv[1]) == 0)) { fapp_bench_tcp_rx(desc, family); } /* UDP */ else if(((argc == 2) || (argc == 3)) && fnet_strcasecmp("udp", argv[1]) == 0) { struct sockaddr multicast_address; struct sockaddr *multicast_address_p = FNET_NULL; if(argc == 3) /* Multicast group address.*/ { if((fnet_inet_ptos(argv[2], &multicast_address) == FNET_ERR) /* Convert from string to address.*/ || !fnet_socket_addr_is_multicast(&multicast_address) /* Check if address is multicast.*/ || ((family & multicast_address.sa_family)==0) ) /* Check supported family.*/ { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2]); return; } multicast_address_p = &multicast_address; } fapp_bench_udp_rx(desc, family, multicast_address_p); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_benchtx_cmd * * DESCRIPTION: Start TX Benchmark. ************************************************************************/ void fapp_benchtx_cmd( fnet_shell_desc_t desc, int argc, char ** argv ) { struct fapp_bench_tx_params bench_params; fnet_memset_zero(&bench_params.foreign_addr, sizeof(bench_params.foreign_addr)); if(fnet_inet_ptos(argv[1], &bench_params.foreign_addr) == FNET_OK) { bench_params.desc = desc; bench_params.foreign_addr.sa_port = FAPP_BENCH_PORT; bench_params.packet_size = FAPP_BENCH_TX_PACKET_SIZE_DEFAULT; bench_params.packet_number = FAPP_BENCH_TX_PACKET_NUMBER_DEFAULT; bench_params.iteration_number = FAPP_BENCH_TX_ITERATION_NUMBER_DEFAULT; if(argc > 3) { char *p = 0; /* Packet size.*/ bench_params.packet_size = (int)fnet_strtoul(argv[3], &p, 0); if ((bench_params.packet_size == 0) || (bench_params.packet_size > FAPP_BENCH_PACKET_SIZE_MAX)) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[3]); /* Print error mesage. */ return; } /* Number of packets.*/ if(argc > 4) { bench_params.packet_number = (int)fnet_strtoul(argv[4], &p, 0); if (bench_params.packet_number == 0) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[4]); /* Print error mesage. */ return; } /* Number of iterations.*/ if(argc > 5) { bench_params.iteration_number = (int)fnet_strtoul(argv[5], &p, 0); if ((bench_params.iteration_number < 1) || (bench_params.iteration_number > FAPP_BENCH_TX_ITERATION_NUMBER_MAX) ) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[5]); /* Print error mesage. */ return; } } } } /* TCP */ if((argc == 2)||(argc >= 3 && fnet_strcasecmp("tcp", argv[2]) == 0)) { fapp_bench_tcp_tx (&bench_params); } /* UDP */ else if(argc >= 3 && fnet_strcasecmp("udp", argv[2]) == 0) { fapp_bench_udp_tx (&bench_params); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2]); } } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); /* Wrong Benchmark Server IP address. */ return; } }
/************************************************************************ * NAME: fapp_ping_cmd * * DESCRIPTION: Ping command. ************************************************************************/ void fapp_ping_cmd( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t ** argv ) { struct fnet_ping_params ping_params; fnet_index_t i; fnet_char_t *p; fnet_uint32_t value; fnet_char_t ip_str[FNET_IP_ADDR_STR_SIZE]; fnet_memset_zero(&ping_params, sizeof(ping_params)); ping_params.cookie = (fnet_uint32_t)desc; ping_params.handler = fapp_ping_handler; ping_params.packet_size = FAPP_PING_DEFAULT_SIZE; ping_params.timeout = FAPP_PING_DEFAULT_TIMEOUT; ping_params.pattern = FAPP_PING_DEFAULT_PATTERN; ping_params.ttl = FAPP_PING_DEFAULT_HOP_LIMIT; ping_params.packet_count = FAPP_PING_DEFAULT_NUMBER; /* Last parameter must be ip address.*/ i = (argc-1u); if(fnet_inet_ptos(argv[i], &ping_params.target_addr) == FNET_ERR) { goto ERROR_PARAMETER; } else { /* TBD Optimise parameters parsing.*/ if(argc > 2u) /* There are additional parameters */ { /* [-c <count>][-i <seconds>]\n\t[-p <pattern>][-s <size>][-h <hoplimit/ttl>] */ for(i=1u; i<(fnet_index_t)(argc-1u); i++) { if (!fnet_strcmp(argv[i], "-c")) { i++; value = fnet_strtoul(argv[i], &p, 10u); if ((value == 0U) && (p == argv[i])) { goto ERROR_PARAMETER; } else { ping_params.packet_count = value; } } else if (!fnet_strcmp(argv[i], "-i")) { i++; value = fnet_strtoul(argv[i], &p, 10u); if ((value == 0U) && (p == argv[i])) { goto ERROR_PARAMETER; } else { ping_params.timeout = value*1000U; } } else if (!fnet_strcmp(argv[i], "-p")) { i++; value = fnet_strtoul(argv[i], &p, 10u); if ((value == 0U) && (p == argv[i])) { goto ERROR_PARAMETER; } else { ping_params.pattern = (fnet_uint8_t)value; } } else if (!fnet_strcmp(argv[i], "-s")) { i++; value = fnet_strtoul(argv[i], &p, 10u); if ((value == 0U) && (p == argv[i])) { goto ERROR_PARAMETER; } else { ping_params.packet_size = (fnet_size_t)value; } } else if (!fnet_strcmp(argv[i], "-h")) { i++; value = fnet_strtoul(argv[i], &p, 10u); if ((value == 0U) && (p == argv[i])) { goto ERROR_PARAMETER; } else { ping_params.ttl = (fnet_uint8_t)value; } } else if (!fnet_strcmp(argv[i], "-n")) { /* Just ignore the -n parameter.*/ } else if (!fnet_strcmp(argv[i], "-I")) { i++; /* Just ignore the -I parameter and its value.*/ } else /* Wrong parameter.*/ { goto ERROR_PARAMETER; } } } if(fnet_ping_request(&ping_params) == FNET_OK) { fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_println(desc, " PING" ); fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_S, "Remote IP addr", fnet_inet_ntop(ping_params.target_addr.sa_family, ping_params.target_addr.sa_data, ip_str, sizeof(ip_str))); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "Message Size", ping_params.packet_size>FNET_CFG_PING_PACKET_MAX?FNET_CFG_PING_PACKET_MAX:ping_params.packet_size); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "Num. of messages", ping_params.packet_count); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "Pattern", ping_params.pattern); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "Hoplimit (TTL)", ping_params.ttl); fnet_shell_println(desc, FAPP_TOCANCEL_STR); fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_block(desc, fapp_ping_on_ctrlc); /* Block shell. */ } else { fnet_shell_println(desc, FAPP_INIT_ERR, "PING"); } } return; ERROR_PARAMETER: fnet_shell_println(desc, FAPP_PARAM_ERR, argv[i]); return; }