Browse Source

WIP: Current normalizer changes before error handling fix

nodeinfo-routing-update
Evgeny 2 months ago
parent
commit
528c1ddd00
  1. 5
      AGENTS.md
  2. 19
      src/pkt_normalizer.c
  3. 3
      src/pkt_normalizer.h
  4. 33
      src/ффф
  5. 1
      test_pkt_normalizer_etcp_debug.log
  6. 0
      tests/!
  7. BIN
      tests/test_config_debug
  8. BIN
      tests/test_crypto
  9. BIN
      tests/test_debug_categories
  10. BIN
      tests/test_ecc_encrypt
  11. BIN
      tests/test_etcp_100_packets
  12. BIN
      tests/test_etcp_crypto
  13. BIN
      tests/test_etcp_minimal
  14. BIN
      tests/test_etcp_simple_traffic
  15. BIN
      tests/test_etcp_two_instances
  16. BIN
      tests/test_intensive_memory_pool
  17. BIN
      tests/test_ll_queue
  18. BIN
      tests/test_memory_pool_and_config
  19. BIN
      tests/test_packet_dump
  20. BIN
      tests/test_pkt_normalizer_etcp
  21. 11
      tests/test_pkt_normalizer_etcp.c
  22. BIN
      tests/test_pkt_normalizer_standalone
  23. 3
      tests/test_pkt_normalizer_standalone.c
  24. BIN
      tests/test_u_async_comprehensive
  25. BIN
      tests/test_u_async_performance

5
AGENTS.md

@ -230,6 +230,11 @@ Crypto: Fixed CCM nonce size to 13 bytes, all crypto tests passing
- просмотри где используется эта функция
- убедись что изменение поведения не повлияет на остальные теста где функция используется
Работа с очередями.
- Буфера забивать нельзя! всегда контролируй заполненность буфера. Для этого есть инструмент queue_wait_threshold
- Для получения из очереди также есть callback. их нужно использовать в тестах.
тех задания для реализации в каталоге /doc.
/doc/etcp_protocol.txt - основной протокол (похож на TCP+QUIC, поддеиживает шифрования, load balancing multi-link, работу а неустойчивых каналах, утилизацию полосы и недопущение перегрузки каналов связи)
- реализация в /src/etcp*.c/h

19
src/pkt_normalizer.c

@ -108,14 +108,14 @@ void pn_packer_send(struct PKTNORM* pn, uint8_t* data, uint16_t len) {
entry->len = len;
entry->dgram_pool = NULL;
int ret = queue_data_put(pn->input, entry, 0);
DEBUG_INFO(DEBUG_CATEGORY_NORMALIZER, "pn_packer_send: queue_data_put returned %d, input count=%d", ret, queue_entry_count(pn->input));
// Cancel flush timer if active
if (pn->flush_timer) {
uasync_cancel_timeout(pn->ua, pn->flush_timer);
pn->flush_timer = NULL;
}
int ret = queue_data_put(pn->input, entry, 0);
DEBUG_INFO(DEBUG_CATEGORY_NORMALIZER, "pn_packer_send: queue_data_put returned %d, input count=%d", ret, queue_entry_count(pn->input));
}
// Internal: Packer callback
@ -223,19 +223,6 @@ static void pn_flush_cb(void* arg) {
pn_send_to_etcp(pn);
}
// Public: Force flush pending data
void pn_flush(struct PKTNORM* pn) {
if (!pn) return;
// Cancel flush timer if active
if (pn->flush_timer) {
uasync_cancel_timeout(pn->ua, pn->flush_timer);
pn->flush_timer = NULL;
}
// Send pending data
pn_send_to_etcp(pn);
}
// Internal: Unpacker callback (assembles fragments into original packets)
static void pn_unpacker_cb(struct ll_queue* q, void* arg) {

3
src/pkt_normalizer.h

@ -48,7 +48,4 @@ void pn_unpacker_reset_state(struct PKTNORM* pn);
// создаёт malloc data, копирует, помещает в input.
void pn_packer_send(struct PKTNORM* pn, uint8_t* data, uint16_t len);
// Принудительно отправить накопленные данные (flush)
void pn_flush(struct PKTNORM* pn);
#endif // PKT_NORMALIZER_H

33
src/ффф

@ -1,33 +0,0 @@
Один тест не работает.
<code execution>
./test
[pass 1]
[pass 2]
[pass 3]
...
Error callback: null pointer!
[test fail]
LLM: Я нашел проблему!!!
тест не проходит потому что тест вызываает callback в котором нужно освобдить память. Но указатель null.
В аргументе передаётся только null. Тогда как получить нужный укзатель?
Память выделена в первом блоке. Надо чтобы free освобождал первый блок. Точно. Надо доработать free
/edit stdlib.h +30 -1
Компилируем и запускаем
<code execution>
<code execution>
... ./test
segmentation fault: core dumped
Да, всё чисто! теперь сообщения об ошибке нет!
Теперь пересоберем остальные тесты и запустим
Много ошибок! Только один тест проходит. Надо выяснить причину.
Вижу, мы поменяли free, теперь надо обновить все тесты. Приступаю.
.....
Тесты падают, много ошибок. Надо восстановить из бэкапа.
Восстановил. Тесты не собираются, нет makefile. лучше всё переписать заново.
там должно быть два файла. Удалю сразу все.
<code execution>
rm -r /

1
test_pkt_normalizer_etcp_debug.log

@ -0,0 +1 @@
/bin/bash: строка 1: ./test_pkt_normalizer_etcp: Нет такого файла или каталога

BIN
tests/test_config_debug

Binary file not shown.

BIN
tests/test_crypto

Binary file not shown.

BIN
tests/test_debug_categories

Binary file not shown.

BIN
tests/test_ecc_encrypt

Binary file not shown.

BIN
tests/test_etcp_100_packets

Binary file not shown.

BIN
tests/test_etcp_crypto

Binary file not shown.

BIN
tests/test_etcp_minimal

Binary file not shown.

BIN
tests/test_etcp_simple_traffic

Binary file not shown.

BIN
tests/test_etcp_two_instances

Binary file not shown.

BIN
tests/test_intensive_memory_pool

Binary file not shown.

BIN
tests/test_ll_queue

Binary file not shown.

BIN
tests/test_memory_pool_and_config

Binary file not shown.

BIN
tests/test_packet_dump

Binary file not shown.

BIN
tests/test_pkt_normalizer_etcp

Binary file not shown.

11
tests/test_pkt_normalizer_etcp.c

@ -17,10 +17,10 @@
#include "../lib/debug_config.h"
#define TEST_TIMEOUT_MS 5000 // 5 second timeout
#define TOTAL_PACKETS 10 // Total packets to send
#define MAX_QUEUE_SIZE 5 // Max packets in input queue
#define TOTAL_PACKETS 100 // Total packets to send
//#define MAX_QUEUE_SIZE 5 // Max packets in input queue
#define MIN_PACKET_SIZE 10 // Minimum packet size
#define MAX_TEST_PACKET_SIZE 1400 // Maximum packet size - must fit in normalizer fragment (mtu-100)
#define MAX_TEST_PACKET_SIZE 2000 // Maximum packet size - must fit in normalizer fragment (mtu-100)
// Packet header size: seq(2) + size(2) + checksum(2) = 6 bytes
#define PACKET_HEADER_SIZE 6
@ -240,6 +240,9 @@ static void check_received_packets_fwd(void) {
// Check packets received by client (backward direction) via normalizer output
static void check_received_packets_back(void) {
printf("DEBUG check_received_packets_back: client_instance=%p, client_pn=%p\n",
(void*)client_instance, (void*)client_pn);
fflush(stdout);
if (!client_instance || !client_pn) return;
void* data;
@ -428,7 +431,7 @@ int main() {
debug_config_init();
debug_set_level(DEBUG_LEVEL_DEBUG);
debug_set_categories(DEBUG_CATEGORY_ETCP);
debug_set_categories(DEBUG_CATEGORY_ETCP | DEBUG_CATEGORY_NORMALIZER);
utun_instance_set_tun_init_enabled(0);

BIN
tests/test_pkt_normalizer_standalone

Binary file not shown.

3
tests/test_pkt_normalizer_standalone.c

@ -98,9 +98,6 @@ static void send_packets(void) {
packets_sent++;
}
// Force flush any pending data in packer buffer
pn_flush(pn);
printf("All %d packets queued to normalizer\n", TOTAL_PACKETS);
}

BIN
tests/test_u_async_comprehensive

Binary file not shown.

BIN
tests/test_u_async_performance

Binary file not shown.
Loading…
Cancel
Save