~titusx/nginx/mainline

« back to all changes in this revision

Viewing changes to src/event/quic/ngx_event_quic_output.c

  • Committer: Vladimir Khomutov
  • Date: 2023-10-26 20:35:09 UTC
  • Revision ID: git-v1:a13ed7f5ed5bebdc0b9217ffafb75ab69f835a84
QUIC: improved packet and frames debug tracing.

Currently, packets generated by ngx_quic_frame_sendto() and
ngx_quic_send_early_cc() are not logged, thus making it hard
to read logs due to gaps appearing in packet numbers sequence.

At frames level, it is handy to see immediately packet number
in which they arrived or being sent.

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
#define NGX_QUIC_SOCKET_RETRY_DELAY      10 /* ms, for NGX_AGAIN on write */
36
36
 
37
37
 
 
38
#define ngx_quic_log_packet(log, pkt)                                         \
 
39
    ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0,                               \
 
40
                   "quic packet tx %s bytes:%ui need_ack:%d"                  \
 
41
                   " number:%L encoded nl:%d trunc:0x%xD",                    \
 
42
                   ngx_quic_level_name((pkt)->level), (pkt)->payload.len,     \
 
43
                   (pkt)->need_ack, (pkt)->number, (pkt)->num_len,            \
 
44
                    (pkt)->trunc);
 
45
 
 
46
 
38
47
static ngx_int_t ngx_quic_create_datagrams(ngx_connection_t *c);
39
48
static void ngx_quic_commit_send(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx);
40
49
static void ngx_quic_revert_send(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx,
578
587
            pkt.need_ack = 1;
579
588
        }
580
589
 
 
590
        f->pnum = ctx->pnum;
 
591
        f->first = now;
 
592
        f->last = now;
 
593
        f->plen = 0;
 
594
 
581
595
        ngx_quic_log_frame(c->log, f, 1);
582
596
 
583
597
        flen = ngx_quic_create_frame(p, f);
588
602
        len += flen;
589
603
        p += flen;
590
604
 
591
 
        f->pnum = ctx->pnum;
592
 
        f->first = now;
593
 
        f->last = now;
594
 
        f->plen = 0;
595
 
 
596
605
        nframes++;
597
606
    }
598
607
 
610
619
 
611
620
    res.data = data;
612
621
 
613
 
    ngx_log_debug6(NGX_LOG_DEBUG_EVENT, c->log, 0,
614
 
                   "quic packet tx %s bytes:%ui"
615
 
                   " need_ack:%d number:%L encoded nl:%d trunc:0x%xD",
616
 
                   ngx_quic_level_name(ctx->level), pkt.payload.len,
617
 
                   pkt.need_ack, pkt.number, pkt.num_len, pkt.trunc);
 
622
    ngx_quic_log_packet(c->log, &pkt);
618
623
 
619
624
    if (ngx_quic_encrypt(&pkt, &res) != NGX_OK) {
620
625
        return NGX_ERROR;
899
904
    frame.u.close.reason.data = (u_char *) reason;
900
905
    frame.u.close.reason.len = ngx_strlen(reason);
901
906
 
 
907
    ngx_quic_log_frame(c->log, &frame, 1);
 
908
 
902
909
    len = ngx_quic_create_frame(NULL, &frame);
903
910
    if (len > NGX_QUIC_MAX_UDP_PAYLOAD_SIZE) {
904
911
        return NGX_ERROR;
905
912
    }
906
913
 
907
 
    ngx_quic_log_frame(c->log, &frame, 1);
908
 
 
909
914
    len = ngx_quic_create_frame(src, &frame);
910
915
    if (len == -1) {
911
916
        return NGX_ERROR;
940
945
 
941
946
    res.data = dst;
942
947
 
 
948
    ngx_quic_log_packet(c->log, &pkt);
 
949
 
943
950
    if (ngx_quic_encrypt(&pkt, &res) != NGX_OK) {
944
951
        ngx_quic_keys_cleanup(pkt.keys);
945
952
        return NGX_ERROR;
1198
1205
    pad = 4 - pkt.num_len;
1199
1206
    min_payload = ngx_max(min_payload, pad);
1200
1207
 
 
1208
#if (NGX_DEBUG)
 
1209
    frame->pnum = pkt.number;
 
1210
#endif
 
1211
 
 
1212
    ngx_quic_log_frame(c->log, frame, 1);
 
1213
 
1201
1214
    len = ngx_quic_create_frame(NULL, frame);
1202
1215
    if (len > NGX_QUIC_MAX_UDP_PAYLOAD_SIZE) {
1203
1216
        return NGX_ERROR;
1204
1217
    }
1205
1218
 
1206
 
    ngx_quic_log_frame(c->log, frame, 1);
1207
 
 
1208
1219
    len = ngx_quic_create_frame(src, frame);
1209
1220
    if (len == -1) {
1210
1221
        return NGX_ERROR;
1220
1231
 
1221
1232
    res.data = dst;
1222
1233
 
 
1234
    ngx_quic_log_packet(c->log, &pkt);
 
1235
 
1223
1236
    if (ngx_quic_encrypt(&pkt, &res) != NGX_OK) {
1224
1237
        return NGX_ERROR;
1225
1238
    }