Example #1
0
/*função responsável por colocar o pacote na fila de envio, utilizado pelo transporte e thread de envio de rotas*/
PUBLIC int net_send(uint16_t dest, byte *data, size_t size, uint8_t protocol)
{
    int node;
    if(protocol == 0)
    {
        node = dest;
    }
    else
    {
        node = hostreachable(dest);
    }
    if(node != 0)
    {
        wait_item.dest = dest;
        wait_item.src = num_global;
        wait_item.data = data;
        wait_item.size = size;
        wait_item.protocol = protocol;
        wait_item.first_dest_link = node;
        wait_item.offset = 0;
        wait_item.ttl = TTL;
        wait_list_insert(wait_item);
        return OK;
    }
    return ERROR;
}
Example #2
0
/* si_sem_wait: wait operation on semaphore sem */ 
void si_sem_wait(si_semaphore *sem)
{
    /* task id */ 
    int task_id; 
    /* disable interrupts */ 
    DISABLE_INTERRUPTS; 

    /* check counter */ 
    if (sem->counter > 0)
    {
        /* decrement */ 
        sem->counter--; 
    }
    else
    {
        /* get task_id of running task */ 
        task_id = task_get_task_id_running();
        /* remove it from ready list */ 
        ready_list_remove(task_id); 
        /* insert it into the semaphore waiting list */ 
        wait_list_insert(
            sem->wait_list, WAIT_LIST_SIZE, task_id); 
        /* call schedule */ 
        schedule(); 
    }
    /* enable interrupts */ 
    ENABLE_INTERRUPTS; 
}
Example #3
0
/*função responsável por colocar o pacote na fila de envio, utilizado recebimento de rotas para repasse*/
PUBLIC void net_resend(datagram_t *datagram)
{
    int node;
    wait_list_item_t resend;
    if((node = hostreachable(datagram->dest))!=0)
    {     
        resend.size = datagram->size;
        resend.id = datagram->id;
        resend.offset = datagram->frag;
        resend.protocol = datagram->protocol;
        resend.ttl = datagram->ttl;
        resend.dest = datagram->dest;
        resend.src = datagram->src;
        resend.data = datagram->data;
        resend.first_dest_link = node;
        wait_list_insert(resend);
    }
}