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; }
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; }