/************************************************************************ * 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) { fnet_ip4_addr_t multicast_address = 0; if(argc == 3) /* Multicast group address.*/ { if((fnet_inet_aton(argv[2], (struct in_addr *) &multicast_address) == FNET_ERR) || !FNET_IP4_ADDR_IS_MULTICAST(multicast_address)) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2]); return; } } fapp_bench_udp_rx(desc, family, multicast_address); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_dhcp_cmd * * DESCRIPTION: Enable DHCP client. ************************************************************************/ void fapp_dhcp_cmd( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t ** argv ) { struct fnet_dhcp_params dhcp_params; fnet_dhcp_desc_t dhcp_desc; fnet_netif_desc_t netif = fnet_netif_get_default(); if(argc == 1u /* By default is "init".*/ #if 0 /* DHCP reboot feature not used too much. */ || fnet_strcasecmp(&FAPP_DHCP_COMMAND_REBOOT[0], argv[1]) == 0 #endif ) /* [reboot] */ { fnet_memset_zero(&dhcp_params, sizeof(struct fnet_dhcp_params)); fapp_dhcp_discover_counter = FAPP_CFG_DHCP_CMD_DISCOVER_MAX; /* reset counter.*/ #if 0 /* DHCP reboot feature not used too much. */ if(fnet_strcasecmp(&FAPP_DHCP_COMMAND_REBOOT[0], argv[1]) == 0) /* [reboot] */ dhcp_params.requested_ip_address.s_addr = fnet_netif_get_ip4_addr(netif); #endif fapp_dhcp_ip_old = fnet_netif_get_ip4_addr(netif); /* Save ip to restore if cancelled. */ /* Enable DHCP client */ dhcp_desc = fnet_dhcp_init(netif, &dhcp_params); if(dhcp_desc != FNET_ERR) { fapp_dhcp_desc = dhcp_desc; /* Register DHCP event handlers. */ fnet_dhcp_handler_updated_set(fapp_dhcp_desc, fapp_dhcp_handler_updated, (void *)desc); fnet_dhcp_handler_discover_set(fapp_dhcp_desc, fapp_dhcp_handler_discover, (void *)desc); fnet_shell_println(desc, FAPP_TOCANCEL_STR); fnet_shell_block(desc, fapp_dhcp_on_ctrlc); /* Block shell. */ } else { fnet_shell_println(desc, FAPP_INIT_ERR, "DHCP"); } } else if((argc == 2u) && (fnet_strcasecmp(&FAPP_COMMAND_RELEASE[0], argv[1]) == 0)) /* [release] */ { fapp_dhcp_release(); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_show * * DESCRIPTION: Shows all system settings. ************************************************************************/ void fapp_get_cmd( fnet_shell_desc_t desc, int argc, char ** argv ) { int index; if(argc == 1) /* Print all prameters. */ { for (index = 0; index < FAPP_SET_CMD_NUM; ++index) { fnet_shell_printf(desc, FAPP_GET_OPT_FORMAT, fapp_setget_cmd_table[index].option); fapp_setget_cmd_table[index].get(desc); } } else /* Print one parameter. */ { for (index = 0; index < FAPP_SET_CMD_NUM; index++) { if(fnet_strcasecmp(fapp_setget_cmd_table[index].option, argv[1]) == 0) { fnet_shell_printf(desc, FAPP_GET_OPT_FORMAT, fapp_setget_cmd_table[index].option); fapp_setget_cmd_table[index].get(desc); return; } } fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_http_cmd * * DESCRIPTION: Run HTTP server. *************************************************************************/ void fapp_http_cmd( fnet_shell_desc_t desc, int argc, char ** argv ) { struct fnet_http_params params; fnet_http_desc_t http_desc; FNET_COMP_UNUSED_ARG(desc); if(argc == 1) /* By default is "init".*/ { fnet_memset_zero(¶ms, sizeof(struct fnet_http_params)); params.root_path = FAPP_HTTP_MOUNT_NAME; /* Root directory path */ params.index_path = FAPP_HTTP_INDEX_FILE; /* Index file path, relative to the root_path */ #if FNET_CFG_HTTP_SSI params.ssi_table = fapp_ssi_table; #endif #if FNET_CFG_HTTP_CGI params.cgi_table = fapp_cgi_table; #endif #if FNET_CFG_HTTP_AUTHENTICATION_BASIC params.auth_table = fapp_auth_table; #endif #if FNET_CFG_HTTP_POST params.post_table = fapp_post_table; #endif /* Enable HTTP server */ http_desc = fnet_http_init(¶ms); if(http_desc != FNET_ERR) { fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_println(desc, " HTTP server started."); fapp_netif_addr_print(desc, AF_SUPPORTED, fapp_default_netif, FNET_FALSE); fnet_shell_println(desc, FAPP_DELIMITER_STR); fapp_http_desc = http_desc; } else { fnet_shell_println(desc, FAPP_INIT_ERR, "HTTP"); } } else if(argc == 2 && fnet_strcasecmp(&FAPP_COMMAND_RELEASE[0], argv[1]) == 0) /* [release] */ { fapp_http_release(); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * 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_mem_erase_cmd * * DESCRIPTION: ************************************************************************/ void fapp_mem_erase_cmd ( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t ** argv ) { fnet_uint32_t address; fnet_size_t size; fnet_char_t *p; fnet_return_t result; FNET_COMP_UNUSED_ARG(desc); fnet_shell_println(desc, "Erasing..."); if (argc == 3u) { address = fnet_strtoul(argv[1],&p,16u); if ((address == 0u) && (p == argv[1])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1] ); return; } size = fnet_strtoul(argv[2],&p,10u); if ((size == 0u) && (p == argv[2])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2] ); return; } result = fapp_mem_erase( (void *)address, size); if( result == FNET_OK) { fnet_shell_println(desc, FAPP_MEM_ERASE_ERASED, address, address+size-1u ); } else { fnet_shell_println(desc, FAPP_MEM_ERASE_FAILED, address, address+size-1u ); } } else if ((argc == 2u) && (fnet_strcasecmp(FAPP_MEM_ERASE_ALL, argv[1]) == 0)) /* Erase all */ { fapp_mem_erase_all(desc); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_mem_erase_cmd * * DESCRIPTION: ************************************************************************/ void fapp_mem_erase_cmd ( fnet_shell_desc_t desc, int argc, char ** argv ) { unsigned long address; unsigned long size; char *p; int result; FNET_COMP_UNUSED_ARG(desc); fnet_shell_println(desc, "Erasing..."); if (argc == 3) { address = fnet_strtoul(argv[1],&p,16); if ((address == 0) && (p == argv[1])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1] ); return; } size = fnet_strtoul(argv[2],&p,10); if ((size == 0) && (p == argv[2])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2] ); return; } result = fapp_mem_erase( (void *)address, size); if( result == FNET_OK) fnet_shell_println(desc, FAPP_MEM_ERASE_ERASED, address, address+size-1 ); else fnet_shell_println(desc, FAPP_MEM_ERASE_FAILED, address, address+size-1 ); } else if ((argc == 2) && fnet_strcasecmp(FAPP_MEM_ERASE_ALL, argv[1]) == 0) /* Erase all */ { fapp_mem_erase_all(desc); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_llmnr_cmd * * DESCRIPTION: Run LLMNR server. *************************************************************************/ void fapp_llmnr_cmd( fnet_shell_desc_t desc, int argc, char ** argv ) { struct fnet_llmnr_params params; fnet_llmnr_desc_t llmnr_desc; if(argc == 1) /* By default is "init".*/ { /* Init parameters.*/ fnet_memset_zero(¶ms, sizeof(params)); params.netif_desc = fapp_default_netif; params.host_name = fapp_params_host_name; /* Start LLMNR server */ llmnr_desc = fnet_llmnr_init(¶ms); if(llmnr_desc != FNET_ERR) { fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_println(desc, " LLMNR server started."); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_S, "Host Name", params.host_name ); fnet_shell_println(desc, FAPP_DELIMITER_STR); fapp_llmnr_desc = llmnr_desc; } else { fnet_shell_println(desc, FAPP_INIT_ERR, "LLMNR"); } } else if(argc == 2 && fnet_strcasecmp(&FAPP_COMMAND_RELEASE[0], argv[1]) == 0) /* [release] */ { fapp_llmnr_release(); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_set_cmd * * DESCRIPTION: Sets system options. ************************************************************************/ void fapp_set_cmd( fnet_shell_desc_t desc, int argc, char ** argv ) { int index; if(argc == 1) /* Print all set options with syntax description. */ { fnet_shell_println(desc, "Valid 'set' options:"); for (index = 0; index < FAPP_SET_CMD_NUM; ++index) { fnet_shell_println(desc, FAPP_SET_OPT_FORMAT, fapp_setget_cmd_table[index].option, fapp_setget_cmd_table[index].syntax); } } else if(argc != 3) { fnet_shell_println(desc, FAPP_PARAM_ERR, ""); } else /* Set parameter */ { for (index = 0; index < FAPP_SET_CMD_NUM; index++) { if(fnet_strcasecmp(fapp_setget_cmd_table[index].option, argv[1]) == 0) { fapp_setget_cmd_table[index].set(desc, argv[2]); /* Print the result value. */ fnet_shell_printf(desc, FAPP_GET_OPT_FORMAT, fapp_setget_cmd_table[index].option); fapp_setget_cmd_table[index].get(desc); goto EXIT; } } fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } EXIT: return; }
/************************************************************************ * 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_dhcp_cmd * * DESCRIPTION: Enable DHCP client. ************************************************************************/ void fapp_dhcp_cmd( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t **argv ) { struct fnet_dhcp_params dhcp_params; fnet_dhcp_desc_t dhcp_desc; fnet_netif_desc_t netif = fnet_netif_get_default(); if(argc == 1u /* By default is "init".*/ #if 0 /* DHCP reboot feature not used too much. */ ||((argc == 2u) && (fnet_strcasecmp(&FAPP_DHCP_COMMAND_REBOOT[0], argv[1]) == 0)) /* [reboot] */ #endif ||((argc == 2u) && (fnet_strcasecmp(&FAPP_DHCP_COMMAND_AUTOIP[0], argv[1]) == 0)) /* [autoip] */ ) { fnet_memset_zero(&dhcp_params, sizeof(struct fnet_dhcp_params)); fapp_dhcp_discover_counter = FAPP_CFG_DHCP_CMD_DISCOVER_MAX; /* reset counter.*/ #if 0 /* DHCP reboot feature not used too much. */ if(fnet_strcasecmp(&FAPP_DHCP_COMMAND_REBOOT[0], argv[1]) == 0) /* [reboot] */ dhcp_params.requested_ip_address.s_addr = fnet_netif_get_ip4_addr(netif); #endif /* Check Auto-IP flag.*/ if((argc == 2u) && (fnet_strcasecmp(&FAPP_DHCP_COMMAND_AUTOIP[0], argv[1]) == 0)) { fapp_dhcp_autoip = FNET_TRUE; } else { fapp_dhcp_autoip = FNET_FALSE; } dhcp_params.probe_addr = FNET_TRUE; /* Enable probing of the newly received address.*/ /* Save current IP address only if it was allocated manually/statically. */ if(fnet_netif_get_ip4_addr_type(netif) == FNET_NETIF_IP_ADDR_TYPE_MANUAL) { fapp_dhcp_ip_old = fnet_netif_get_ip4_addr(netif); /* Save ip to restore if cancelled. */ } else { fapp_dhcp_ip_old = 0; } /* Start DHCP client */ dhcp_desc = fnet_dhcp_init(netif, &dhcp_params); if(dhcp_desc) { fapp_dhcp_desc = dhcp_desc; /* Register DHCP event handler callbacks. */ fnet_dhcp_set_callback_updated(fapp_dhcp_desc, fapp_dhcp_callback_updated, (void *)desc); fnet_dhcp_set_callback_discover(fapp_dhcp_desc, fapp_dhcp_callback_discover, (void *)desc); fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_println(desc, " DHCPv4 Client started."); fnet_shell_println(desc, FAPP_DELIMITER_STR); fnet_shell_println(desc, FAPP_TOCANCEL_STR); fnet_shell_block(desc, fapp_dhcp_on_ctrlc); /* Block shell. */ } else { fnet_shell_println(desc, FAPP_INIT_ERR, "DHCP"); } } else if((argc == 2u) && (fnet_strcasecmp(&FAPP_COMMAND_RELEASE[0], argv[1]) == 0)) /* [release] */ { fapp_dhcp_release(); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }