WIP debug algo thunder

This commit is contained in:
Quentin 2019-08-28 16:33:43 +02:00
parent a1d58c1203
commit a9e5267495
2 changed files with 29 additions and 3 deletions

View file

@ -57,6 +57,7 @@ void prepare(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct bu
.fmt.content.udp_metadata_thunder.id = thunderc->emit_id, .fmt.content.udp_metadata_thunder.id = thunderc->emit_id,
}; };
buffer_append_ap (bp, &metadata); buffer_append_ap (bp, &metadata);
if (ctx->verbose > 1) fprintf(stderr, " [algo_thunder] UDP metadata added\n");
} }
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) {
@ -79,14 +80,21 @@ void pad(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer
struct buffer_packet *bp_iter = get_app_buffer (&app_ctx->br, (void *)add_ref); struct buffer_packet *bp_iter = get_app_buffer (&app_ctx->br, (void *)add_ref);
if (bp_iter == NULL) break; if (bp_iter == NULL) break;
union abstract_packet *ap = buffer_first_ap (bp_iter); union abstract_packet *ap = buffer_first_ap (bp_iter);
if (ap->fmt.headers.cmd != CMD_UDP_ENCAPSULATED || ap->fmt.headers.flags & FLAG_READ_NEXT) { if (ap->fmt.headers.cmd != CMD_UDP_ENCAPSULATED) {
fprintf(stderr, "Invalid buffer!\n"); fprintf(stderr, "Invalid buffer payload!\n");
exit(EXIT_FAILURE);
}
union abstract_packet *ap_meta = ap_next (ap);
if (ap_meta->fmt.headers.cmd != CMD_UDP_METADATA_THUNDER) {
fprintf(stderr, "Invalid buffer metadata!\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (buffer_full_size (bp) + ap->fmt.headers.size > TOR_CELL_SIZE - thunderc->monit_pkt_size) break; if (buffer_full_size (bp) + ap->fmt.headers.size + ap_meta->fmt.headers.size > TOR_CELL_SIZE - thunderc->monit_pkt_size) break;
buffer_append_ap (bp, ap); buffer_append_ap (bp, ap);
buffer_append_ap (bp, ap_meta);
if (ctx->verbose > 1) fprintf(stderr, " [algo_thunder] Pad packet (now %ld bytes)\n", buffer_full_size (bp));
} }
} }
@ -98,6 +106,10 @@ int schedule(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct bu
do { do {
// 1. We choose the link // 1. We choose the link
if (cat->socklist->len == 0) {
if (ctx->verbose > 1) fprintf(stderr, " [algo_thunder] No link available, packet will be dropped\n");
break;
}
thunderc->selected_link = (thunderc->selected_link + 1) % cat->socklist->len; thunderc->selected_link = (thunderc->selected_link + 1) % cat->socklist->len;
// 2. We create the packet template // 2. We create the packet template
@ -181,7 +193,12 @@ void classify(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct b
bi->i = i; bi->app_ctx = app_ctx; bi->missing = expected; bi->i = i; bi->app_ctx = app_ctx; bi->missing = expected;
set_timeout (ctx, timeout, &bi, on_block); set_timeout (ctx, timeout, &bi, on_block);
if (ctx->verbose > 1) {
fprintf(stderr, " [algo_thunder] Set timeout on link %d of %ld ms (packets expected: %ld, seen: %ld)\n",
i, timeout, expected, thunderc->received_pkts_on_link[i]);
} }
}
if (ctx->verbose > 1) fprintf(stderr, " [algo_thunder] Classify done\n");
} }
struct unpad_info { struct unpad_info {
@ -207,6 +224,7 @@ void unpad(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buff
ui->ap_arr_vals++; ui->ap_arr_vals++;
} }
} }
if (ctx->verbose > 1) fprintf(stderr, " [algo_thunder] Unpad done\n");
} }
void adapt(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp, struct unpad_info *ui) { void adapt(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp, struct unpad_info *ui) {
@ -232,6 +250,7 @@ void adapt(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buff
} }
mv_buffer_rtof (&app_ctx->br, fdinfo); mv_buffer_rtof (&app_ctx->br, fdinfo);
if (ctx->verbose > 1) fprintf(stderr, " [algo_thunder] Adapt done\n");
} }
int algo_thunder_on_stream(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) { int algo_thunder_on_stream(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct buffer_packet* bp) {
@ -250,8 +269,14 @@ int algo_thunder_on_datagram(struct evt_core_ctx* ctx, struct evt_core_fdinfo* f
return 0; return 0;
} }
void algo_thunder_free(void* v) {
struct rr_ctx* rr = v;
free(rr);
}
void algo_thunder_init(struct evt_core_ctx* ctx, struct algo_ctx* app_ctx, struct algo_params* ap) { void algo_thunder_init(struct evt_core_ctx* ctx, struct algo_ctx* app_ctx, struct algo_params* ap) {
app_ctx->misc = malloc(sizeof(struct thunder_ctx)); app_ctx->misc = malloc(sizeof(struct thunder_ctx));
app_ctx->free_misc = algo_thunder_free;
if (app_ctx->misc == NULL) { if (app_ctx->misc == NULL) {
perror("malloc failed in algo thunder init"); perror("malloc failed in algo thunder init");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);

View file

@ -41,6 +41,7 @@ union abstract_packet* buffer_append_ap(struct buffer_packet* bp, union abstract
union abstract_packet *new_ap = buffer_last_ap(bp); union abstract_packet *new_ap = buffer_last_ap(bp);
memcpy(new_ap, ap, ap->fmt.headers.size); memcpy(new_ap, ap, ap->fmt.headers.size);
bp->ap_count++; bp->ap_count++;
new_ap->fmt.headers.flags &= ~FLAG_READ_NEXT;
return new_ap; return new_ap;
} }