/*-----------------------------------------------------------------------------------*/ err_t delif_init(struct netif *netif) { struct delif *del; del = malloc(sizeof(struct delif)); if (!del) return ERR_MEM; netif->state = del; netif->name[0] = 'd'; netif->name[1] = 'e'; netif->output = delif_output; del->netif = malloc(sizeof(struct netif)); if (!del->netif) { free(del); return ERR_MEM; } #ifdef LWIP_UNIX_LINUX /* tapif_init(del->netif);*/ tunif_init(del->netif); #else /* LWIP_UNIX_LINUX */ tunif_init(del->netif); #endif /* LWIP_UNIX_LINUX */ del->input = netif->input; del->netif->input = delif_input; sys_timeout(DELIF_TIMEOUT, delif_input_timeout, netif); sys_timeout(DELIF_TIMEOUT, delif_output_timeout, netif); return ERR_OK; }
/*-----------------------------------------------------------------------------------*/ static void delif_thread(void *arg) { struct netif *netif = (struct netif*)arg; struct delif *del; sys_sem_t sem; del = (struct delif*)netif->state; #ifdef LWIP_UNIX_LINUX tapif_init(del->netif); #else /* LWIP_UNIX_LINUX */ tunif_init(del->netif); #endif /* LWIP_UNIX_LINUX */ sys_timeout(DELIF_TIMEOUT, delif_input_timeout, netif); sys_timeout(DELIF_TIMEOUT, delif_output_timeout, netif); if(sys_sem_new(&sem, 0) != ERR_OK) { LWIP_ASSERT("Failed to create semaphore", 0); } sys_sem_wait(&sem); }