/** * SLIP netif initialization * * Call the arch specific sio_open and remember * the opened device in the state field of the netif. * * @param netif the lwip network interface structure for this slipif * @return ERR_OK if serial line could be opened, * ERR_MEM if no memory could be allocated, * ERR_IF is serial line couldn't be opened * * @note netif->num must contain the number of the serial port to open * (0 by default). If netif->state is != NULL, it is interpreted as an * u8_t pointer pointing to the serial port number instead of netif->num. * */ err_t slipif_init(struct netif *netif) { struct slipif_priv *priv; u8_t sio_num; LWIP_DEBUGF(SLIP_DEBUG, ("slipif_init: netif->num=%"U16_F"\n", (u16_t)netif->num)); /* Allocate private data */ priv = (struct slipif_priv *)mem_malloc(sizeof(struct slipif_priv)); if (!priv) { return ERR_MEM; } netif->name[0] = 's'; netif->name[1] = 'l'; #if LWIP_IPV4 netif->output = slipif_output_v4; #endif /* LWIP_IPV4 */ #if LWIP_IPV6 netif->output_ip6 = slipif_output_v6; #endif /* LWIP_IPV6 */ netif->mtu = SLIP_MAX_SIZE; /* netif->state or netif->num contain the port number */ if (netif->state != NULL) { sio_num = *(u8_t*)netif->state; } else { sio_num = netif->num; } /* Try to open the serial port. */ priv->sd = sio_open(sio_num); if (!priv->sd) { /* Opening the serial port failed. */ mem_free(priv); return ERR_IF; } /* Initialize private data */ priv->p = NULL; priv->q = NULL; priv->state = SLIP_RECV_NORMAL; priv->i = 0; priv->recved = 0; #if SLIP_RX_FROM_ISR priv->rxpackets = NULL; #endif netif->state = priv; /* initialize the snmp variables and counters inside the struct netif */ MIB2_INIT_NETIF(netif, snmp_ifType_slip, SLIP_SIO_SPEED(priv->sd)); #if SLIP_USE_RX_THREAD /* Create a thread to poll the serial line. */ sys_thread_new(SLIPIF_THREAD_NAME, slipif_loop_thread, netif, SLIPIF_THREAD_STACKSIZE, SLIPIF_THREAD_PRIO); #endif /* SLIP_USE_RX_THREAD */ return ERR_OK; }
static err_t netif_init(struct netif *netif) { netif->linkoutput = netif_output; netif->output = etharp_output; netif->output_ip6 = ethip6_output; netif->mtu = ETHERNET_MTU; netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6; MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, 100000000); SMEMCPY(netif->hwaddr, your_mac_address_goes_here, sizeof(netif->hwaddr)); netif->hwaddr_len = sizeof(netif->hwaddr); return ERR_OK; }
/** * Should be called at the beginning of the program to set up the * network interface. It calls the function low_level_init() to do the * actual setup of the hardware. * * This function should be passed as a parameter to netif_add(). * * @param netif the lwip network interface structure for this ethernetif * @return ERR_OK if the loopif is initialized * ERR_MEM if private data couldn't be allocated * any other err_t on error */ err_t ethernetif_init(struct netif *netif) { struct ethernetif *ethernetif; LWIP_ASSERT("netif != NULL", (netif != NULL)); ethernetif = mem_malloc(sizeof(struct ethernetif)); if (ethernetif == NULL) { LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_init: out of memory\r\n")); return ERR_MEM; } #if LWIP_NETIF_HOSTNAME /* Initialize interface hostname */ netif->hostname = "cksy-lwip"; #endif /* LWIP_NETIF_HOSTNAME */ /* * Initialize the snmp variables and counters inside the struct netif. * The last argument should be replaced with your link speed, in units * of bits per second. */ MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); netif->state = ethernetif; netif->name[0] = IFNAME0; netif->name[1] = IFNAME1; /* We directly use etharp_output() here to save a function call. * You can instead declare your own function an call etharp_output() * from it if you have to do some checks before sending (e.g. if link * is available...) */ #if LWIP_IPV4 netif->output = etharp_output; #endif #if LWIP_IPV6 netif->output_ip6 = ethip6_output; #endif /* LWIP_IPV6 */ netif->linkoutput = low_level_output; ethernetif->ethaddr = (struct eth_addr *) & (netif->hwaddr[0]); /* initialize the hardware */ low_level_init(netif); return ERR_OK; }
/** * Initialize a lwip network interface structure for a loopback interface * * @param netif the lwip network interface structure for this loopif * @return ERR_OK if the loopif is initialized * ERR_MEM if private data couldn't be allocated */ static err_t netif_loopif_init(struct netif *netif) { /* initialize the snmp variables and counters inside the struct netif * ifSpeed: no assumption can be made! */ MIB2_INIT_NETIF(netif, snmp_ifType_softwareLoopback, 0); netif->name[0] = 'l'; netif->name[1] = 'o'; #if LWIP_IPV4 netif->output = netif_loop_output_ipv4; #endif #if LWIP_IPV6 netif->output_ip6 = netif_loop_output_ipv6; #endif #if LWIP_LOOPIF_MULTICAST netif->flags |= NETIF_FLAG_IGMP; #endif return ERR_OK; }