Example #1
0
static int pico_dns_client_query_prefix(struct pico_dns_prefix *pre)
{
    uint16_t id = 0;
    uint8_t retry = 32;

    do {
        id = (uint16_t)(pico_rand() & 0xFFFFU);
        dns_dbg("DNS: generated id %u\n", id);
    } while (retry-- && pico_dns_client_idcheck(id));
    if (!retry)
        return -1;

    pre->id = short_be(id);
    pre->qr = PICO_DNS_QR_QUERY;
    pre->opcode = PICO_DNS_OPCODE_QUERY;
    pre->aa = PICO_DNS_AA_NO_AUTHORITY;
    pre->tc = PICO_DNS_TC_NO_TRUNCATION;
    pre->rd = PICO_DNS_RD_IS_DESIRED;
    pre->ra = PICO_DNS_RA_NO_SUPPORT;
    pre->z = 0;
    pre->rcode = PICO_DNS_RCODE_NO_ERROR;
    pre->qdcount = short_be(1);
    pre->ancount = short_be(0);
    pre->nscount = short_be(0);
    pre->arcount = short_be(0);

    return 0;
}
Example #2
0
static int pico_vde_send(struct pico_device *dev, void *buf, int len)
{
    struct pico_device_vde *vde = (struct pico_device_vde *) dev;
    //printf("[%s] send %d bytes.\n", dev->name, len);
    if ((vde->lost_out == 0) || ((pico_rand() % 100) > vde->lost_out))
        return (int)vde_send(vde->conn, buf, (uint32_t)len, 0);
    else
        return len; /* Silently discarded "on the wire" */

}
Example #3
0
static uint32_t pico_slaacv4_getip(struct pico_device *dev, uint8_t rand)
{
    uint32_t seed = 0;
    if (dev->eth != NULL)
    {
        seed = pico_hash((const uint8_t *)dev->eth->mac.addr, PICO_SIZE_ETH);
    }

    if (rand)
    {
        seed += pico_rand();
    }

    return SLAACV4_CREATE_IPV4(seed);
}
Example #4
0
static int pico_vde_poll(struct pico_device *dev, int loop_score)
{
    struct pico_device_vde *vde = (struct pico_device_vde *) dev;
    struct pollfd pfd;
    unsigned char buf[VDE_MTU];
    int len;
    pfd.fd = vde_datafd(vde->conn);
    pfd.events = POLLIN;
    do  {
        if (poll(&pfd, 1, 0) <= 0)
            return loop_score;

        len = vde_recv(vde->conn, buf, VDE_MTU, 0);
        if (len > 0) {
            //printf("Received pkt.\n");
            if ((vde->lost_in == 0) || ((pico_rand() % 100) > vde->lost_in)) {
                loop_score--;
                pico_stack_recv(dev, buf, (uint32_t)len);
            }
        }
    } while(loop_score > 0);
    return 0;
}