comparison src/event/ngx_event_quic.c @ 8614:3d79c08bb0f1 quic

QUIC: changed ACK frame debugging. Previously ACK ranges were logged as a gap/range sequence. Now these values are expanded to packet number ranges for easier reading.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 28 Oct 2020 09:15:04 +0000
parents 867c189f875d
children 27e305834078
comparison
equal deleted inserted replaced
8613:867c189f875d 8614:3d79c08bb0f1
371 static void 371 static void
372 ngx_quic_log_frame(ngx_log_t *log, ngx_quic_frame_t *f, ngx_uint_t tx) 372 ngx_quic_log_frame(ngx_log_t *log, ngx_quic_frame_t *f, ngx_uint_t tx)
373 { 373 {
374 u_char *p, *last, *pos, *end; 374 u_char *p, *last, *pos, *end;
375 ssize_t n; 375 ssize_t n;
376 uint64_t gap, range; 376 uint64_t gap, range, largest, smallest;
377 ngx_uint_t i; 377 ngx_uint_t i;
378 u_char buf[NGX_MAX_ERROR_STR]; 378 u_char buf[NGX_MAX_ERROR_STR];
379 379
380 p = buf; 380 p = buf;
381 last = buf + sizeof(buf); 381 last = buf + sizeof(buf);
392 break; 392 break;
393 393
394 case NGX_QUIC_FT_ACK: 394 case NGX_QUIC_FT_ACK:
395 case NGX_QUIC_FT_ACK_ECN: 395 case NGX_QUIC_FT_ACK_ECN:
396 396
397 p = ngx_slprintf(p, last, 397 p = ngx_slprintf(p, last, "ACK n:%ui delay:%uL ",
398 "ACK largest:%uL fr:%uL nranges:%ui delay:%uL",
399 f->u.ack.largest, f->u.ack.first_range,
400 f->u.ack.range_count, f->u.ack.delay); 398 f->u.ack.range_count, f->u.ack.delay);
401 399
402 pos = f->u.ack.ranges_start; 400 pos = f->u.ack.ranges_start;
403 end = f->u.ack.ranges_end; 401 end = f->u.ack.ranges_end;
402
403 largest = f->u.ack.largest;
404 smallest = f->u.ack.largest - f->u.ack.first_range;
405
406 if (largest == smallest) {
407 p = ngx_slprintf(p, last, "%uL", largest);
408
409 } else {
410 p = ngx_slprintf(p, last, "%uL-%uL", largest, smallest);
411 }
404 412
405 for (i = 0; i < f->u.ack.range_count; i++) { 413 for (i = 0; i < f->u.ack.range_count; i++) {
406 n = ngx_quic_parse_ack_range(log, pos, end, &gap, &range); 414 n = ngx_quic_parse_ack_range(log, pos, end, &gap, &range);
407 if (n == NGX_ERROR) { 415 if (n == NGX_ERROR) {
408 break; 416 break;
409 } 417 }
410 418
411 pos += n; 419 pos += n;
412 420
413 p = ngx_slprintf(p, last, " %uL,%uL", gap, range); 421 largest = smallest - gap - 2;
422 smallest = largest - range;
423
424 if (largest == smallest) {
425 p = ngx_slprintf(p, last, " %uL", largest);
426
427 } else {
428 p = ngx_slprintf(p, last, " %uL-%uL", largest, smallest);
429 }
414 } 430 }
415 431
416 if (f->type == NGX_QUIC_FT_ACK_ECN) { 432 if (f->type == NGX_QUIC_FT_ACK_ECN) {
417 p = ngx_slprintf(p, last, " ECN counters ect0:%uL ect1:%uL ce:%uL", 433 p = ngx_slprintf(p, last, " ECN counters ect0:%uL ect1:%uL ce:%uL",
418 f->u.ack.ect0, f->u.ack.ect1, f->u.ack.ce); 434 f->u.ack.ect0, f->u.ack.ect1, f->u.ack.ce);
3105 ngx_uint_t found; 3121 ngx_uint_t found;
3106 ngx_queue_t *q; 3122 ngx_queue_t *q;
3107 ngx_quic_frame_t *f; 3123 ngx_quic_frame_t *f;
3108 ngx_quic_connection_t *qc; 3124 ngx_quic_connection_t *qc;
3109 3125
3110 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
3111 "quic handle ack range min:%uL max:%uL", min, max);
3112
3113 qc = c->quic; 3126 qc = c->quic;
3114 3127
3115 *send_time = NGX_TIMER_INFINITE; 3128 *send_time = NGX_TIMER_INFINITE;
3116 found = 0; 3129 found = 0;
3117 found_num = 0; 3130 found_num = 0;