s8_t i; /* 从ARP缓存找. */ if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) && (ip4_addr_cmp(dst_addr, &arp_table[etharp_cached_entry].ipaddr))) { ETHARP_STATS_INC(etharp.cachehit); return etharp_output_to_arp_index(netif, q, etharp_cached_entry); } ...
#ifdef IP_STATS lwip_stats.ip.xmit++; #endif /* IP_STATS */ DEBUGF(IP_DEBUG, ("ip_output_if: %c%c ", netif->name[0], netif->name[1])); DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%u\n", netif->name[0], netif->name[1], netif->num)); #if IP_DEBUG ip_debug_print(...
之前说etharp_output远远不是终点,听起来很吓人啊,不过确实的,终点其实是low_level_output,不对,其实是ETH->DMATPDR = 0,但是我们只要看到low_level_output就行了,那里数据包已经全部构建完成了. 简化后就是这样: err_tetharp_output(structnetif*netif,structpbuf*q,constip4_addr_t*ipaddr){conststructeth_...