static void fnet_arp_trace(char *str, fnet_arp_header_t *arp_hdr) { char mac_str[FNET_MAC_ADDR_STR_SIZE]; char ip_str[FNET_IP4_ADDR_STR_SIZE]; fnet_printf(FNET_SERIAL_ESC_FG_GREEN"%s", str); /* Print app-specific header.*/ fnet_println("[ARP header]"FNET_SERIAL_ESC_FG_BLACK); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); fnet_println("|(HWType) 0x%04x |(PrType) 0x%04x |", fnet_ntohs(arp_hdr->hard_type), fnet_ntohs(arp_hdr->prot_type)); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); fnet_println("|(HWSize) 0x%02x |(PrSize) 0x%02x |(Opcode) %5u |", arp_hdr->hard_size, arp_hdr->prot_size, fnet_ntohs(arp_hdr->op)); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_mac_to_str(arp_hdr->sender_hard_addr, mac_str); fnet_println("|(SenderHWAddr) "FNET_SERIAL_ESC_FG_BLUE"%17s"FNET_SERIAL_ESC_FG_BLACK" |", mac_str); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_println("|(SenderPrAddr) "FNET_SERIAL_ESC_FG_BLUE"%15s"FNET_SERIAL_ESC_FG_BLACK" |", fnet_inet_ntoa(*(struct in_addr *)(&arp_hdr->sender_prot_addr), ip_str)); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_mac_to_str(arp_hdr->target_hard_addr, mac_str); fnet_println("|(TargetHWAddr) "FNET_SERIAL_ESC_FG_BLUE"%17s"FNET_SERIAL_ESC_FG_BLACK" |", mac_str); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_println("|(TargetPrAddr) "FNET_SERIAL_ESC_FG_BLUE"%15s"FNET_SERIAL_ESC_FG_BLACK" |", fnet_inet_ntoa(*(struct in_addr *)(&arp_hdr->targer_prot_addr), ip_str)); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); }
void fnet_eth_trace(char *str, fnet_eth_header_t *eth_hdr) { char mac_str[FNET_MAC_ADDR_STR_SIZE]; fnet_printf(FNET_SERIAL_ESC_FG_GREEN"%s", str); /* Print app-specific header.*/ fnet_println("[ETH header]"FNET_SERIAL_ESC_FG_BLACK); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_mac_to_str(eth_hdr->destination_addr, mac_str); fnet_println("|(Dest) "FNET_SERIAL_ESC_FG_BLUE"%17s"FNET_SERIAL_ESC_FG_BLACK" |", mac_str); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_mac_to_str(eth_hdr->source_addr, mac_str); fnet_println("|(Src) "FNET_SERIAL_ESC_FG_BLUE"%17s"FNET_SERIAL_ESC_FG_BLACK" |", mac_str); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/\\/\\/\\/-+"); fnet_println("|(Type) 0x%04x |", fnet_ntohs(eth_hdr->type)); fnet_println("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); }
static void fapp_get_cmd_mac(fnet_shell_desc_t desc) { char mac_str[FNET_MAC_ADDR_STR_SIZE]; fnet_mac_addr_t macaddr; fnet_netif_get_hw_addr(fapp_default_netif, macaddr, sizeof(fnet_mac_addr_t)); fnet_mac_to_str(macaddr, mac_str); fnet_shell_println(desc, FAPP_GET_SOPT_FORMAT, mac_str); }
static void fapp_stat_cmd( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t ** argv ) { struct fnet_netif_statistics statistics; fnet_netif_desc_t netif = fnet_netif_get_default(); FNET_COMP_UNUSED_ARG(argc); FNET_COMP_UNUSED_ARG(argv); /* Print Packet statistics. */ if(fnet_netif_get_statistics(netif, &statistics) == FNET_OK) { fnet_shell_println(desc, "\nPackets:"); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "TX Packets", statistics.tx_packet); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "RX Packets", statistics.rx_packet); } #if FNET_CFG_IP6 { fnet_index_t i; fnet_netif_ip6_prefix_t ip6_prefix; fnet_netif_ip6_neighbor_cache_t ip6_neighbor_cache; fnet_char_t numaddr[FNET_IP6_ADDR_STR_SIZE]; fnet_char_t mac_str[FNET_MAC_ADDR_STR_SIZE]; /* Print content of IPv6 Prefix List. */ fnet_shell_println(desc, "\nIPv6 Prefix List:"); for(i=0U; fnet_netif_get_ip6_prefix(netif, i, &ip6_prefix) == FNET_TRUE; i++) { fnet_shell_println(desc," [%d] %s/%d\n", i, fnet_inet_ntop(AF_INET6, &ip6_prefix.prefix, numaddr, sizeof(numaddr)), ip6_prefix.prefix_length); } /* Print content of IPv6 Neighbor Cache. */ for(i=0U; fnet_netif_get_ip6_neighbor_cache(netif, i, &ip6_neighbor_cache) == FNET_TRUE; i++) { if(i == 0U) { fnet_shell_println(desc, "\nIPv6 Neighbor Cache:"); } fnet_shell_println(desc," [%d] %s = %s (%s)\n", i, fnet_inet_ntop(AF_INET6, &ip6_neighbor_cache.ip_addr, numaddr, sizeof(numaddr)), fnet_mac_to_str(ip6_neighbor_cache.ll_addr, mac_str), (ip6_neighbor_cache.is_router == FNET_TRUE) ? "router" : "host"); } } #endif }
/************************************************************************ * NAME: fapp_info_print * * DESCRIPTION: Display detailed information about the stack. ************************************************************************/ static void fapp_info_print( fnet_shell_desc_t desc ) { fnet_char_t mac_str[FNET_MAC_ADDR_STR_SIZE]; fnet_mac_addr_t macaddr; fnet_netif_desc_t netif = fnet_netif_get_default(); fapp_netif_info_print(desc, netif); /* HW address, if any */ if(fnet_netif_get_hw_addr(netif, macaddr, sizeof(fnet_mac_addr_t)) == FNET_OK) { fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_S, "MAC Address", fnet_mac_to_str(macaddr, mac_str)); } fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "MTU", fnet_netif_get_mtu(netif)); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_S, "Link Status", fnet_netif_connected(netif) ? "connected" : "unconnected"); fnet_shell_println(desc, FAPP_SHELL_INFO_FORMAT_D, "Free Heap", fnet_free_mem_status()); #if FAPP_CFG_HTTP_CMD && FNET_CFG_HTTP fapp_http_info(desc); #endif #if FAPP_CFG_DHCP_CMD && FNET_CFG_DHCP && FNET_CFG_IP4 fapp_dhcp_info(desc); #endif #if FAPP_CFG_TELNET_CMD && FNET_CFG_TELNET fapp_telnet_info(desc); #endif #if FAPP_CFG_TFTPS_CMD && FNET_CFG_TFTP_SRV fapp_tftps_info(desc); #endif #if FAPP_CFG_LLMNR_CMD && FNET_CFG_LLMNR fapp_llmnr_info(desc); #endif }
static int fapp_http_ssi_echo_handle(char * query, long *cookie) { int result = FNET_OK; const struct fapp_http_echo_variable * echo_var_ptr; fnet_netif_desc_t netif = fapp_default_netif; const char *ssi_buffer_ptr = 0; /* Find static echo value. */ for(echo_var_ptr = fapp_http_echo_variables; echo_var_ptr->variable && echo_var_ptr->value; echo_var_ptr++) { if (!fnet_strcmp( query, echo_var_ptr->variable)) { ssi_buffer_ptr = echo_var_ptr->value; break; } } /* Find run-time echo values. */ if(ssi_buffer_ptr == 0) { #if FNET_CFG_IP4 char ip_str[FNET_IP4_ADDR_STR_SIZE]; #endif ssi_buffer_ptr = fapp_http_ssi_buffer; if (!fnet_strcmp( query, "IP_ADDRESS")) { #if FNET_CFG_IP4 fnet_ip4_addr_t ip_adr = fnet_netif_get_ip4_addr(netif); fnet_inet_ntoa(*(struct in_addr *)( &ip_adr), ip_str); fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "%s", ip_str); #else fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "..."); #endif /* FNET_CFG_IP4 */ } else if (!fnet_strcmp( query, "SUBNET_MASK")) { #if FNET_CFG_IP4 fnet_ip4_addr_t ip_adr = fnet_netif_get_ip4_subnet_mask(netif); fnet_inet_ntoa(*(struct in_addr *)( &ip_adr), ip_str); fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "%s", ip_str); #else fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "..."); #endif /* FNET_CFG_IP4 */ } else if (!fnet_strcmp( query, "GATEWAY")) { #if FNET_CFG_IP4 fnet_ip4_addr_t ip_adr = fnet_netif_get_ip4_gateway(netif); fnet_inet_ntoa(*(struct in_addr *)( &ip_adr), ip_str); fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "%s", ip_str); #else fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "..."); #endif /* FNET_CFG_IP4 */ } else if (!fnet_strcmp( query, "MAC")) { fnet_mac_addr_t macaddr; char mac_str[FNET_MAC_ADDR_STR_SIZE]; fnet_netif_get_hw_addr(netif, macaddr, sizeof(fnet_mac_addr_t)); fnet_mac_to_str(macaddr, mac_str); fnet_snprintf(fapp_http_ssi_buffer, sizeof(fapp_http_ssi_buffer), "%s", mac_str); } else { result = FNET_ERR; } } *cookie = (long)ssi_buffer_ptr; /* Save ssi_buffer_ptr as cookie.*/ return result; }