nsapi_error_t LWIP::add_ethernet_interface(EMAC &emac, bool default_if, OnboardNetworkStack::Interface **interface_out) { #if LWIP_ETHERNET Interface *interface = new (std::nothrow) Interface(); if (!interface) { return NSAPI_ERROR_NO_MEMORY; } interface->emac = &emac; interface->memory_manager = &memory_manager; interface->ppp = false; #if (MBED_MAC_ADDRESS_SUM != MBED_MAC_ADDR_INTERFACE) netif->interface.hwaddr[0] = MBED_MAC_ADDR_0; netif->interface.hwaddr[1] = MBED_MAC_ADDR_1; netif->interface.hwaddr[2] = MBED_MAC_ADDR_2; netif->interface.hwaddr[3] = MBED_MAC_ADDR_3; netif->interface.hwaddr[4] = MBED_MAC_ADDR_4; netif->interface.hwaddr[5] = MBED_MAC_ADDR_5; #else mbed_mac_address((char *) interface->netif.hwaddr); #endif interface->netif.hwaddr_len = 6; if (!netif_add(&interface->netif, #if LWIP_IPV4 0, 0, 0, #endif interface, &LWIP::Interface::emac_if_init, tcpip_input)) { return NSAPI_ERROR_DEVICE_ERROR; } if (default_if) { netif_set_default(&interface->netif); default_interface = interface; } netif_set_link_callback(&interface->netif, &LWIP::Interface::netif_link_irq); netif_set_status_callback(&interface->netif, &LWIP::Interface::netif_status_irq); *interface_out = interface; /* Use mac address as additional seed to random number generator */ uint64_t seed = interface->netif.hwaddr[0]; for (uint8_t i = 1; i < 8; i++) { seed <<= 8; seed |= interface->netif.hwaddr[i % 6]; } lwip_add_random_seed(seed); return NSAPI_ERROR_OK; #else return NSAPI_ERROR_UNSUPPORTED; #endif //LWIP_ETHERNET }
static void mbed_lwip_set_mac_address(struct netif *netif) { #if (MBED_MAC_ADDRESS_SUM != MBED_MAC_ADDR_INTERFACE) netif->hwaddr[0] = MBED_MAC_ADDR_0; netif->hwaddr[1] = MBED_MAC_ADDR_1; netif->hwaddr[2] = MBED_MAC_ADDR_2; netif->hwaddr[3] = MBED_MAC_ADDR_3; netif->hwaddr[4] = MBED_MAC_ADDR_4; netif->hwaddr[5] = MBED_MAC_ADDR_5; #else mbed_mac_address((char *)netif->hwaddr); #endif netif->hwaddr_len = ETH_HWADDR_LEN; /* Use mac address as additional seed to random number generator */ uint64_t seed = netif->hwaddr[0]; for (uint8_t i = 1; i < 8; i++) { seed <<= 8; seed |= netif->hwaddr[i % 6]; } lwip_add_random_seed(seed); }