Refactor delta in a function

This commit is contained in:
Quentin 2019-08-27 10:10:17 +02:00
parent 4cb27b1420
commit 9c1971af34

View file

@ -12,26 +12,62 @@ struct thunder_ctx {
uint8_t total_links; uint8_t total_links;
uint8_t delta_t_per_link[64]; uint8_t delta_t_per_link[64];
uint8_t blacklisted[64]; uint8_t blacklisted[64];
struct timespec prev_link_time; size_t monit_pkt_size;
struct timespec prev_link_time, prev_packet_time;
}; };
uint64_t compute_delta(struct timespec* prev_time, uint64_t max) {
struct timespec curr;
int secs, nsecs;
uint64_t mili_sec;
// 4. We compute the time difference
if (clock_gettime(CLOCK_MONOTONIC, &curr) == -1){
perror("clock_gettime error");
exit(EXIT_FAILURE);
}
secs = curr.tv_sec - prev_time->tv_sec;
nsecs = curr.tv_nsec - prev_time->tv_nsec;
*prev_time = curr;
mili_sec = secs * 1000 + nsecs / 1000000;
if (mili_sec > max) mili_sec = max;
return mili_sec;
}
void prepare(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) { void prepare(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) {
struct algo_ctx* app_ctx = fdinfo->cat->app_ctx; struct algo_ctx* app_ctx = fdinfo->cat->app_ctx;
struct thunder_ctx* thunderc = app_ctx->misc; struct thunder_ctx* thunderc = app_ctx->misc;
uint64_t delta_pkt = compute_delta(&thunderc->prev_packet_time, 200);
thunderc->emit_id++; thunderc->emit_id++;
union abstract_packet metadata = { union abstract_packet metadata = {
.fmt.headers.cmd = CMD_UDP_METADATA_THUNDER, .fmt.headers.cmd = CMD_UDP_METADATA_THUNDER,
.fmt.headers.size = sizeof(metadata.fmt.headers) + sizeof(metadata.fmt.content.udp_metadata_thunder), .fmt.headers.size = sizeof(metadata.fmt.headers) + sizeof(metadata.fmt.content.udp_metadata_thunder),
.fmt.headers.flags = 0, .fmt.headers.flags = 0,
.fmt.content.udp_metadata_thunder.id = thunderc->emit_id, .fmt.content.udp_metadata_thunder.id = thunderc->emit_id,
.fmt.content.udp_metadata_thunder.deltat = 0 //@FIXME delta t must be set .fmt.content.udp_metadata_thunder.deltat = delta_pkt
}; };
buffer_append_ap (bp, &metadata); buffer_append_ap (bp, &metadata);
} }
void pad(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) { void pad(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) {
struct algo_ctx* app_ctx = fdinfo->cat->app_ctx;
struct thunder_ctx* thunderc = app_ctx->misc;
uint64_t ref = 0l + thunderc->emit_id;
dup_buffer_toa (&app_ctx->br, bp, (void *)ref);
if (ref > 10 && get_app_buffer (&app_ctx->br, (void *)ref - 10l)) {
mv_buffer_atof (&app_ctx->br, (void *)ref - 10l);
}
//@FIXME we must add the delta t of the current packet
for (uint64_t add_ref = ref; add_ref >= 0 && get_app_buffer (&app_ctx->br, (void *)add_ref); add_ref--) {
struct buffer_packet *bpa = get_app_buffer (&app_ctx->br, (void *)add_ref);
}
} }
@ -41,11 +77,6 @@ int schedule(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct bu
struct evt_core_fdinfo *to_fdinfo = NULL; struct evt_core_fdinfo *to_fdinfo = NULL;
struct evt_core_cat* cat = evt_core_get_from_cat (ctx, "tcp-write"); struct evt_core_cat* cat = evt_core_get_from_cat (ctx, "tcp-write");
struct timespec curr;
int secs, nsecs;
uint64_t mili_sec;
do { do {
// 1. We choose the link // 1. We choose the link
thunderc->selected_link = (thunderc->selected_link + 1) % cat->socklist->len; thunderc->selected_link = (thunderc->selected_link + 1) % cat->socklist->len;
@ -53,7 +84,7 @@ int schedule(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct bu
// 2. We create the packet template // 2. We create the packet template
union abstract_packet links = { union abstract_packet links = {
.fmt.headers.cmd = CMD_LINK_MONITORING_THUNDER, .fmt.headers.cmd = CMD_LINK_MONITORING_THUNDER,
.fmt.headers.size = sizeof(links.fmt.headers) + sizeof(links.fmt.content.link_monitoring_thunder) + sizeof(struct link_info) * (thunderc->total_links - 1), .fmt.headers.size = thunderc->monit_pkt_size,
.fmt.headers.flags = 0, .fmt.headers.flags = 0,
.fmt.content.link_monitoring_thunder.links_status = {} .fmt.content.link_monitoring_thunder.links_status = {}
}; };
@ -65,15 +96,7 @@ int schedule(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct bu
union abstract_packet *new_ap = buffer_append_ap (bp_dup, &links); union abstract_packet *new_ap = buffer_append_ap (bp_dup, &links);
// 4. We compute the time difference // 4. We compute the time difference
if (clock_gettime(CLOCK_MONOTONIC, &curr) == -1){ uint64_t mili_sec = compute_delta (&thunderc->prev_link_time, 200);
perror("clock_gettime error");
exit(EXIT_FAILURE);
}
secs = curr.tv_sec - thunderc->prev_link_time.tv_sec;
nsecs = curr.tv_nsec - thunderc->prev_link_time.tv_nsec;
thunderc->prev_link_time = curr;
mili_sec = secs * 1000 + nsecs / 1000000;
if (mili_sec > 200) mili_sec = 200;
// 5. We create the array // 5. We create the array
struct link_info *li = &new_ap->fmt.content.link_monitoring_thunder.links_status; struct link_info *li = &new_ap->fmt.content.link_monitoring_thunder.links_status;
@ -103,6 +126,9 @@ void algo_thunder_init(struct evt_core_ctx* ctx, struct algo_ctx* app_ctx, struc
memset(app_ctx->misc, 0, sizeof(struct thunder_ctx)); memset(app_ctx->misc, 0, sizeof(struct thunder_ctx));
struct thunder_ctx* thunderc = app_ctx->misc; struct thunder_ctx* thunderc = app_ctx->misc;
thunderc->selected_link = UINT8_MAX - 1; thunderc->selected_link = UINT8_MAX - 1;
union abstract_packet links = {};
thunderc->monit_pkt_size = sizeof(links.fmt.headers) + sizeof(links.fmt.content.link_monitoring_thunder) + sizeof(struct link_info) * (thunderc->total_links - 1);
} }
void classify() { void classify() {