Пример #1
0
int _l2_ping_req_handler(int argc, char **argv)
{
    size_t payload_strlen;
    uint16_t count = 5;
    timex_t start, end, period;

    if (transceiver_pid == KERNEL_PID_UNDEF) {
        puts("Transceiver not initialized");
        return 1;
    }
    if (argc < 2) {
        printf("Usage:\t%s <ADDR> [COUNT] [MSG]\n", argv[0]);
        return 1;
    }

    char l2_payload[L2_PING_PAYLOAD_SIZE];
    if (argc > 3) {
        payload_strlen = strlen(argv[3]);
        if (payload_strlen > L2_PING_PAYLOAD_SIZE) {
            printf("[l2_ping] Your input is too long and will be truncated to \"%.*s\".\n", L2_PING_PAYLOAD_SIZE, argv[3]);
            payload_strlen = L2_PING_PAYLOAD_SIZE;
        }
        memset(l2_payload, 0, L2_PING_PAYLOAD_SIZE);
        strncpy(l2_payload, argv[3], payload_strlen);
    }
    else {
        payload_strlen = 0;
    }

    if (argc > 2) {
        count = atoi(argv[2]);
    }

    printf("[l2_ping] Send %" PRIu8 " ping requests to %" PRIu16 " with interval %" PRIu32 ".%" PRIu32 "s and payload %s\n",
            count, atoi(argv[1]),
            timex_from_uint64(L2_PING_DEFAULT_INTERVAL).seconds,
            timex_from_uint64(L2_PING_DEFAULT_INTERVAL).microseconds,
            (argc > 3) ? l2_payload : "NULL");
    vtimer_now(&start);
    l2_ping((radio_address_t) atoi(argv[1]), count, L2_PING_DEFAULT_INTERVAL,
            l2_payload, payload_strlen, 0);
    vtimer_now(&end);
    period = timex_sub(end, start);

    printf("  --- ping statistics for host %" PRIu16 " ---\n", l2_ping_stats.dst);
    printf("  %" PRIu16 " packets transmitted, %" PRIu16 " received, %" PRIu16 "%% packet loss, time %" PRIu32 ".%06" PRIu32 "s\n",
           l2_ping_stats.ping_count,
           l2_ping_stats.pong_count,
           100 - ((l2_ping_stats.pong_count * 100) / l2_ping_stats.ping_count),
           period.seconds,
           period.microseconds);
    printf("  rtt min/avg/max = %" PRIu32 ".%06" PRIu32 "/%" PRIu32 ".%06" PRIu32 "/%" PRIu32 ".%06" PRIu32 " s\n",
            l2_ping_stats.min_rtt.seconds, l2_ping_stats.min_rtt.microseconds,
            l2_ping_stats.avg_rtt.seconds, l2_ping_stats.avg_rtt.microseconds,
            l2_ping_stats.max_rtt.seconds, l2_ping_stats.max_rtt.microseconds);

    return 0;
}
Пример #2
0
static void test_timex_from_uint64(void)
{
    timex_t time;
    time = timex_from_uint64(1001000);
    TEST_ASSERT(time.seconds == 1);
    TEST_ASSERT(time.microseconds == 1000);
}
Пример #3
0
static void calc_rtt(void)
{
    timex_t rtt = timex_sub(end, start);
    rtt_sum = timex_add(rtt_sum, rtt);

    l2_ping_stats.last_rtt = rtt;
    l2_ping_stats.avg_rtt = timex_from_uint64(timex_uint64(rtt_sum) / l2_ping_stats.pong_count);
    if (timex_cmp(rtt, l2_ping_stats.max_rtt) > 0) {
        l2_ping_stats.max_rtt = rtt;
    }
    if (timex_cmp(rtt, l2_ping_stats.min_rtt) < 0) {
        l2_ping_stats.min_rtt = rtt;
    }
}
Пример #4
0
kernel_pid_t nhdp_start(void)
{
    if (nhdp_pid == KERNEL_PID_UNDEF) {
        /* Init destination address for NHDP's packets */

        /* Start the NHDP thread */
        nhdp_pid = thread_create(nhdp_stack, sizeof(nhdp_stack), THREAD_PRIORITY_MAIN - 1,
                                 THREAD_CREATE_STACKTEST, _nhdp_runner, NULL, "NHDP");

#if (NHDP_METRIC_NEEDS_TIMER)
        /* Configure periodic timer message to refresh metric values */
        if (nhdp_pid != KERNEL_PID_UNDEF) {
            metric_interval = timex_from_uint64(DAT_REFRESH_INTERVAL * SEC_IN_USEC);
            metric_msg.type = NHDP_METRIC_TIMER;
            metric_msg.content.ptr = NULL;
            xtimer_set_msg64(&metric_timer, timex_uint64(metric_interval),
                             metric_msg, nhdp_pid);
        }
#endif
    }

    return nhdp_pid;
}
Пример #5
0
static void sleep_until_gate_reacts(void)
{
    vtimer_sleep(timex_from_uint64(telemetry.reactivity_us));
}