diff --git a/src/transport_layer/etcp.h b/src/transport_layer/etcp.h index 032bda23..07aace13 100644 --- a/src/transport_layer/etcp.h +++ b/src/transport_layer/etcp.h @@ -76,13 +76,13 @@ struct INFLIGHT_PACKET {// выделяется из etcp->inflight_pool struct ll_entry ll; uint32_t seq; // packet seq (ID по документации) struct ETCP_LINK* last_link; // Заимствованный курсор выбора следующего пути; очищается перед free линка - uint64_t last_timestamp; // Last send timestamp + uint64_t last_timestamp; // Время последней принятой отправки, 0.1мс; только диагностика, не RTO/BBR uint64_t last_attempt_id; // Последняя принятая транспортом попытка; ненулевой ID отличает retry uint32_t send_count; // Статистика отправок с насыщением, без wrap uint32_t retrans_req_count; // Число запросов повтора с насыщением uint32_t active_attempts; // Попытки этого seq, ещё занимающие окна каналов uint8_t state; // WAIT_SEND — готов к отправке; WAIT_ACK — логически ожидает доставки - uint8_t send_hist[8]; // через какие каналы передавался пакет (NEW). send_count - head ptr + uint8_t send_hist[8]; // local_link_id последних попыток; send_count%8 — следующая позиция до насыщения счётчика }; // Список пакетов для сборки. собирается в ll_queue (используем быстрый поиск с хешем) diff --git a/src/transport_layer/etcp_debug.c b/src/transport_layer/etcp_debug.c index c299cf6f..3f40620f 100644 --- a/src/transport_layer/etcp_debug.c +++ b/src/transport_layer/etcp_debug.c @@ -59,13 +59,20 @@ void etcp_dump_pkt_sections(struct ETCP_DGRAM* pkt, struct ETCP_LINK* link, int offset += 5; break; } + case ETCP_SECTION_ACK_REQUEST: + pos += snprintf(buf + pos, sizeof(buf) - pos, " till_query"); + offset++; + break; case ETCP_SECTION_PAYLOAD: { if (offset + ETCP_PAYLOAD_HEADER_SIZE > len) { offset = len; break; } payload_seq = (uint32_t)data[offset + 1] | ((uint32_t)data[offset + 2] << 8) | ((uint32_t)data[offset + 3] << 16) | ((uint32_t)data[offset + 4] << 24); payload_size = len - offset - ETCP_PAYLOAD_HEADER_SIZE; + uint64_t attempt_id = 0; + for (unsigned i = 0; i < 8; i++) attempt_id |= (uint64_t)data[offset + 5 + i] << (8 * i); has_payload = 1; - pos += snprintf(buf + pos, sizeof(buf) - pos, " payload=%u(seq=%u)", payload_size, payload_seq); + pos += snprintf(buf + pos, sizeof(buf) - pos, " payload=%u(seq=%u attempt=%llu)", + payload_size, payload_seq, (unsigned long long)attempt_id); offset = len; break; }