Exemplo n.º 1
0
static gnrc_nettest_res_t _pkt_test(uint16_t cmd_type, kernel_pid_t pid,
                                    gnrc_pktsnip_t *in, unsigned int exp_pkts,
                                    const kernel_pid_t *exp_senders,
                                    const gnrc_pktsnip_t **exp_out)
{
    msg_t msg;
    timex_t t = { 0, GNRC_NETTEST_TIMEOUT };
    gnrc_nettest_res_t res = GNRC_NETTEST_SUCCESS;

    msg.type = cmd_type;
    msg.content.ptr = (char *)in;

    msg_send(&msg, pid);
    timex_normalize(&t);

    if (exp_pkts == 0) {
        thread_yield();
    }

    for (unsigned int i = 0; i < exp_pkts; i++) {
        gnrc_pktsnip_t *out;
        const gnrc_pktsnip_t *exp = exp_out[i];

        if (vtimer_msg_receive_timeout(&msg, t) < 0) {
            return GNRC_NETTEST_TIMED_OUT;
        }

        if (msg.type != cmd_type) {
            return GNRC_NETTEST_WRONG_MSG;
        }

        if (msg.sender_pid != exp_senders[i]) {
            return GNRC_NETTEST_WRONG_SENDER;
        }

        out = (gnrc_pktsnip_t *)msg.content.ptr;

        if (out == NULL) {
            return GNRC_NETTEST_FAIL;
        }

        while (out && exp) {
            if ((out->users != exp->users) ||
                    (out->size != exp->size) ||
                    (out->type != exp->type) ||
                    (memcmp(out->data, exp->data, out->size) != 0)) {
                return GNRC_NETTEST_FAIL;
            }

            out = out->next;
            exp = exp->next;
        }

        gnrc_pktbuf_release((gnrc_pktsnip_t *)msg.content.ptr);
    }

    return res;
}
Exemplo n.º 2
0
static ng_nettest_res_t _pkt_test(uint16_t cmd_type, kernel_pid_t pid, ng_pktsnip_t *in,
                                  unsigned int exp_pkts, kernel_pid_t exp_senders[],
                                  ng_pktsnip_t *exp_out[])
{
    msg_t msg;
    timex_t t = { 0, NG_NETTEST_TIMEOUT };
    ng_nettest_res_t res = NG_NETTEST_SUCCESS;

    msg.type = cmd_type;
    msg.content.ptr = (char *)in;

    msg_send(&msg, pid);

    for (unsigned int i = 0; i < exp_pkts; i++) {
        ng_pktsnip_t *out;

        if ((vtimer_msg_receive_timeout(&msg, t) < 0) && res == NG_NETTEST_SUCCESS) {
            res = NG_NETTEST_TIMED_OUT;
        }

        if (msg.type != NG_NETAPI_MSG_TYPE_SND && (res == NG_NETTEST_SUCCESS)) {
            res = NG_NETTEST_WRONG_MSG;
        }

        if (msg.sender_pid != exp_senders[i] && (res == NG_NETTEST_SUCCESS)) {
            res = NG_NETTEST_WRONG_SENDER;
        }

        out = (ng_pktsnip_t *)msg.content.ptr;

        if ((out == NULL) && (res == NG_NETTEST_SUCCESS)) {
            res = NG_NETTEST_FAIL;
        }

        while (out) {
            if ((res == NG_NETTEST_SUCCESS) &&
                ((out->users != exp_out[i]->users) ||
                 (out->size != exp_out[i]->size) ||
                 (out->type != exp_out[i]->type) ||
                 (memcmp(out->data, exp_out[i]->data, out->size) != 0))) {
                res = NG_NETTEST_FAIL;
            }

            out = out->next;
        }

        ng_pktbuf_release((ng_pktsnip_t *)msg.content.ptr);
    }

    return res;
}