/** * Perform Sanity check of user-configurable values, and initialize all modules. */ void lwip_init(void) { esp_ms_timer_init(); // espressif /* Modules initialization */ stats_init(); #if !NO_SYS sys_init(); #endif /* !NO_SYS */ mem_init(); memp_init(); pbuf_init(); netif_init(); #if LWIP_IPV4 ip_init(); #if LWIP_ARP etharp_init(); #endif /* LWIP_ARP */ #endif /* LWIP_IPV4 */ #if LWIP_RAW raw_init(); #endif /* LWIP_RAW */ #if LWIP_UDP udp_init(); #endif /* LWIP_UDP */ #if LWIP_TCP tcp_init(); #endif /* LWIP_TCP */ #if LWIP_SNMP snmp_init(); #endif /* LWIP_SNMP */ #if LWIP_AUTOIP autoip_init(); #endif /* LWIP_AUTOIP */ #if LWIP_IGMP igmp_init(); #endif /* LWIP_IGMP */ #if LWIP_DNS dns_init(); #endif /* LWIP_DNS */ #if LWIP_IPV6 ip6_init(); nd6_init(); #if LWIP_IPV6_MLD mld6_init(); #endif /* LWIP_IPV6_MLD */ #endif /* LWIP_IPV6 */ #if PPP_SUPPORT ppp_init(); #endif #if LWIP_TIMERS sys_timeouts_init(); #endif /* LWIP_TIMERS */ }
/** * Perform Sanity check of user-configurable values, and initialize all modules. */ void ICACHE_FLASH_ATTR lwip_init(void) { /* Modules initialization */ stats_init(); #if !NO_SYS sys_init(); #endif /* !NO_SYS */ mem_init(); memp_init(); pbuf_init(); netif_init(); #if LWIP_SOCKET lwip_socket_init(); #endif /* LWIP_SOCKET */ ip_init(); #if LWIP_ARP etharp_init(); #endif /* LWIP_ARP */ #if LWIP_RAW raw_init(); #endif /* LWIP_RAW */ #if LWIP_UDP udp_init(); #endif /* LWIP_UDP */ #if LWIP_TCP tcp_init(); #endif /* LWIP_TCP */ #if LWIP_SNMP snmp_init(); #endif /* LWIP_SNMP */ #if LWIP_AUTOIP autoip_init(); #endif /* LWIP_AUTOIP */ #if LWIP_IGMP igmp_init(); #endif /* LWIP_IGMP */ #if LWIP_DNS dns_init(); #endif /* LWIP_DNS */ #if LWIP_IPV6 ip6_init(); nd6_init(); #if LWIP_IPV6_MLD mld6_init(); #endif /* LWIP_IPV6_MLD */ #endif /* LWIP_IPV6 */ #if LWIP_TIMERS sys_timeouts_init(); #endif /* LWIP_TIMERS */ }
*/ void lwip_init(void) { /* Sanity check user-configurable values */ lwip_sanity_check(); /* Modules initialization */ stats_init(); #if !NO_SYS sys_init(); #endif /* !NO_SYS */ mem_init(); memp_init(); pbuf_init(); netif_init(); #if LWIP_SOCKET lwip_socket_init(); #endif /* LWIP_SOCKET */ ip4_init(); ip6_init(); #if LWIP_ARP ethar_init(); #endif /* LWIP_ARP */ #if LWIP_RAW raw_init(); #endif /* LWIP_RAW */ #if LWIP_UDP udp_init(); #endif /* LWIP_UDP */ #if LWIP_TCP tcp_init(); #endif /* LWIP_TCP */ #if LWIP_SNMP snmp_init(); #endif /* LWIP_SNMP */ #if LWIP_AUTOIP autoip_init(); #endif /* LWIP_AUTOIP */ #if LWIP_IGMP igmp_init(); #endif /* LWIP_IGMP */ #if LWIP_DNS dns_init(); #endif /* LWIP_DNS */
int netifc_open(void) { efi_boot_services* bs = gSys->BootServices; efi_status ret; bs->CreateEvent(EVT_TIMER, TPL_CALLBACK, NULL, NULL, &net_timer); snp = netifc_find_available(); if (!snp) { printf("Failed to find a usable network interface\n"); return -1; } if (bs->AllocatePages(AllocateAnyPages, EfiLoaderData, NUM_BUFFER_PAGES, ð_buffers_base)) { printf("Failed to allocate net buffers\n"); return -1; } num_eth_buffers = NUM_BUFFER_PAGES * 2; uint8_t* ptr = (void*)eth_buffers_base; for (int i = 0; i < num_eth_buffers; ++i) { eth_buffer* buf = (void*)ptr; buf->magic = ETH_BUFFER_MAGIC; eth_put_buffer(buf); ptr += 2048; } ip6_init(snp->Mode->CurrentAddress.addr); ret = snp->ReceiveFilters(snp, EFI_SIMPLE_NETWORK_RECEIVE_UNICAST | EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST, 0, 0, mcast_filter_count, (void*)mcast_filters); if (ret) { printf("Failed to install multicast filters %s\n", xefi_strerror(ret)); return -1; } eth_dump_status(); if (snp->Mode->MCastFilterCount != mcast_filter_count) { printf("OOPS: expected %d filters, found %d\n", mcast_filter_count, snp->Mode->MCastFilterCount); goto force_promisc; } for (size_t i = 0; i < mcast_filter_count; i++) { //uint8_t *m = (void*) &mcast_filters[i]; //printf("i=%d %02x %02x %02x %02x %02x %02x\n", i, m[0], m[1], m[2], m[3], m[4], m[5]); for (size_t j = 0; j < mcast_filter_count; j++) { //m = (void*) &snp->Mode->MCastFilter[j]; //printf("j=%d %02x %02x %02x %02x %02x %02x\n", j, m[0], m[1], m[2], m[3], m[4], m[5]); if (!memcmp(mcast_filters + i, &snp->Mode->MCastFilter[j], 6)) { goto found_it; } } printf("OOPS: filter #%zu missing\n", i); goto force_promisc; found_it:; } return 0; force_promisc: ret = snp->ReceiveFilters(snp, EFI_SIMPLE_NETWORK_RECEIVE_UNICAST | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST, 0, 0, 0, NULL); if (ret) { printf("Failed to set promiscuous mode (%s)\n", xefi_strerror(ret)); return -1; } return 0; }