#include "measure.h" void measure_parse(int size, struct measure_conf* mc) { struct timespec curr; uint64_t micro_sec; if (size != mc->payload_size) { perror("read error"); exit(EXIT_FAILURE); } struct measure_packet* head = (struct measure_packet*) mc->payload; if (clock_gettime(CLOCK_MONOTONIC, &curr) == -1){ perror("clock_gettime error"); exit(EXIT_FAILURE); } time_t now; time(&now); char* ctime_no_newline = strtok(ctime(&now), "\n"); micro_sec = elapsed_micros (&head->emit_time, &curr); printf("[%s] Packet %llu latency %luµs\n", ctime_no_newline, (unsigned long long)head->counter, micro_sec); if (!mc->inhibit_exit && head->counter >= mc->max_measure) { printf("Measurement done\n"); exit(EXIT_SUCCESS); } } void measure_prepare(struct measure_conf* mc) { if (mc->interval <= 0) mc->interval = 1000; if (mc->max_measure <= 0) mc->max_measure = 1; if (mc->payload_size < sizeof(struct measure_packet)) mc->payload_size = sizeof(struct measure_packet); if ((mc->payload = malloc(sizeof(char) * mc->payload_size)) == NULL) { perror("payload malloc failed"); exit(EXIT_FAILURE); } memset(mc->payload, 0, mc->payload_size); char *my_msg = "Tu n'es pas tout a fait la misere,\nCar les levres les plus pauvres te denoncent\nPar un sourire."; size_t msg_len = strlen(my_msg); size_t cursor_msg = 0; for (size_t i = sizeof(struct measure_packet); i < mc->payload_size; i++) { mc->payload[i] = my_msg[cursor_msg]; cursor_msg = (cursor_msg + 1) % msg_len; } }