Major architectural changes: - utun_instance_run() now does single iteration instead of mainloop - Added tun_read_callback() to handle TUN device packets - Added utun_instance_register_sockets() for uasync integration - Mainloop moved to main() with proper signal handling - Removed parse config file functions from debug_config - all fprintf replaced with DEBUG_* macros Files changed: - src/utun.c: Added mainloop, signal handlers, proper init order - src/utun_instance.c: Added callback, socket registration, single-run - src/utun_instance.h: Added declarations, tun_socket_id field - u_async/debug_config.c: Removed file parsing and auto-reload - u_async/debug_config.h: Removed file functions, added categories - changelog.txt: Added all changes Breaking changes: - debug_parse_config_file() removed (use debug_parse_config() only) - etcp crypto integration needs fixing (separate issue) AGENTS.md principles followed: - No backward compatibility preserved - Removed 103+ lines of legacy code - Added statistics tracking - Clean architecture: create -> init -> register -> run -> destroy
171 lines
6.6 KiB
Makefile
171 lines
6.6 KiB
Makefile
CC := gcc
|
|
CFLAGS := -Os -std=c99 -Wall -Wextra -D_ISOC99_SOURCE -DENABLE_TESTS -DETCP_DEBUG -DETCP_DEBUG_EXT
|
|
SRC_DIR := src
|
|
TEST_DIR := tests
|
|
INCLUDES := -I$(SRC_DIR) -Iu_async -Itinycrypt/lib/include/ -Itinycrypt/lib/source/ -Itinycrypt/tests/include/ -I.
|
|
|
|
# Директории для объектных файлов
|
|
OBJ_DIR := obj
|
|
SRC_OBJ_DIR := $(OBJ_DIR)/src
|
|
TEST_OBJ_DIR := $(OBJ_DIR)/tests
|
|
|
|
# Исходники tinycrypt
|
|
TINYCRYPT_SRCS := \
|
|
tinycrypt/lib/source/ecc.c \
|
|
tinycrypt/lib/source/ecc_dh.c \
|
|
tinycrypt/lib/source/ecc_platform_specific.c \
|
|
tinycrypt/lib/source/aes_encrypt.c \
|
|
tinycrypt/lib/source/aes_decrypt.c \
|
|
tinycrypt/lib/source/utils.c \
|
|
tinycrypt/lib/source/ctr_mode.c \
|
|
tinycrypt/lib/source/ccm_mode.c
|
|
|
|
# Исходники u_async
|
|
UASYNC_SRCS := \
|
|
u_async/u_async.c \
|
|
u_async/timeout_heap.c \
|
|
u_async/debug_config.c
|
|
|
|
# Объектные файлы tinycrypt (остаются в своих директориях)
|
|
TINYCRYPT_OBJS := $(TINYCRYPT_SRCS:.c=.o)
|
|
|
|
# Основные объектные файлы (будут в obj/src/)
|
|
SC_LIB_OBJS := $(SRC_OBJ_DIR)/secure_channel.o $(SRC_OBJ_DIR)/crc32.o
|
|
UASYNC_OBJS := $(SRC_OBJ_DIR)/u_async.o $(SRC_OBJ_DIR)/timeout_heap.o $(OBJ_DIR)/u_async/debug_config.o
|
|
PN_OBJS := $(SRC_OBJ_DIR)/pkt_normalizer.o
|
|
LL_QUEUE_OBJS := $(SRC_OBJ_DIR)/ll_queue.o
|
|
ETCP_OBJS := $(SRC_OBJ_DIR)/etcp.o $(SRC_OBJ_DIR)/etcp_connections.o $(SRC_OBJ_DIR)/crc32.o
|
|
CONFIG_PARSER_OBJS := $(SRC_OBJ_DIR)/config_parser.o
|
|
TUN_IF_OBJS := $(SRC_OBJ_DIR)/tun_if.o
|
|
ROUTING_OBJS := $(SRC_OBJ_DIR)/routing.o
|
|
CONTROL_SOCKET_OBJS := # REMOVED - control_socket removed
|
|
UTUN_OBJS := $(SRC_OBJ_DIR)/utun.o $(SRC_OBJ_DIR)/utun_instance.o $(SRC_OBJ_DIR)/utun_fixes.o $(SRC_OBJ_DIR)/utun_route_fix.o
|
|
|
|
# Тестовые объектные файлы (будут в obj/tests/)
|
|
TEST_PKT_NORMALIZER_OBJS := $(TEST_OBJ_DIR)/test_pkt_normalizer.o
|
|
TEST_ETCP_OBJS := $(TEST_OBJ_DIR)/test_etcp.o
|
|
TEST_ETCP_STRESS_OBJS := $(TEST_OBJ_DIR)/test_etcp_stress.o
|
|
TEST_ETCP_SIMPLE_OBJS := $(TEST_OBJ_DIR)/test_etcp_simple.o
|
|
TEST_U_ASYNC_COMPREHENSIVE_OBJS := $(TEST_OBJ_DIR)/test_u_async_comprehensive.o
|
|
TEST_U_ASYNC_SIMPLE_OBJS := $(TEST_OBJ_DIR)/test_u_async_simple.o
|
|
TEST_U_ASYNC_PERFORMANCE_OBJS := $(TEST_OBJ_DIR)/test_u_async_performance.o
|
|
TEST_DEBUG_CONFIG_OBJS := $(TEST_OBJ_DIR)/test_debug_config.o
|
|
TEST_LL_QUEUE_COMPREHENSIVE_OBJS := $(TEST_OBJ_DIR)/test_ll_queue_comprehensive.o
|
|
SIMPLE_UASYNC_OBJS := $(TEST_OBJ_DIR)/simple_uasync.o
|
|
TEST_ECC_ENCRYPT_OBJS := $(TEST_OBJ_DIR)/test_ecc_encrypt.o
|
|
TEST_ROUTING_OBJS := $(TEST_OBJ_DIR)/test_routing.o
|
|
|
|
# Основная цель
|
|
all: utun \
|
|
$(TEST_DIR)/test_pkt_normalizer \
|
|
$(TEST_DIR)/test_etcp \
|
|
$(TEST_DIR)/test_etcp_stress \
|
|
$(TEST_DIR)/test_etcp_simple \
|
|
$(TEST_DIR)/test_u_async_comprehensive \
|
|
$(TEST_DIR)/test_u_async_simple \
|
|
$(TEST_DIR)/test_u_async_performance \
|
|
$(TEST_DIR)/test_debug_config \
|
|
$(TEST_DIR)/test_ll_queue_comprehensive \
|
|
$(TEST_DIR)/test_ecc_encrypt \
|
|
$(TEST_DIR)/test_routing
|
|
|
|
# Создание директорий
|
|
$(OBJ_DIR):
|
|
mkdir -p $(OBJ_DIR)
|
|
mkdir -p $(OBJ_DIR)/src
|
|
mkdir -p $(OBJ_DIR)/tests
|
|
mkdir -p $(OBJ_DIR)/u_async
|
|
|
|
$(SRC_OBJ_DIR): $(OBJ_DIR)
|
|
mkdir -p $(SRC_OBJ_DIR)
|
|
|
|
$(TEST_OBJ_DIR): $(OBJ_DIR)
|
|
mkdir -p $(TEST_OBJ_DIR)
|
|
|
|
# Правило компиляции для исходников из src/
|
|
$(SRC_OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(SRC_OBJ_DIR)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
|
|
# Правило компиляции для тестовых .c файлов
|
|
$(TEST_OBJ_DIR)/%.o: $(TEST_DIR)/%.c | $(TEST_OBJ_DIR)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
|
|
# Правило компиляции для tinycrypt (оставляем в оригинальных директориях)
|
|
tinycrypt/lib/source/%.o: tinycrypt/lib/source/%.c
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
|
|
# Правило компиляции для u_async файлов
|
|
$(SRC_OBJ_DIR)/u_async.o: u_async/u_async.c | $(SRC_OBJ_DIR)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
|
|
$(SRC_OBJ_DIR)/timeout_heap.o: u_async/timeout_heap.c | $(SRC_OBJ_DIR)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
|
|
$(OBJ_DIR)/u_async/debug_config.o: u_async/debug_config.c | $(OBJ_DIR)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
|
|
|
# Правила линковки
|
|
utun: $(UTUN_OBJS) $(CONFIG_PARSER_OBJS) $(TUN_IF_OBJS) $(ROUTING_OBJS) $(CONTROL_SOCKET_OBJS) $(ETCP_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_pkt_normalizer: $(TEST_PKT_NORMALIZER_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_etcp: $(TEST_ETCP_OBJS) $(ETCP_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_etcp_stress: $(TEST_ETCP_STRESS_OBJS) $(ETCP_OBJS) $(LL_QUEUE_OBJS) $(SIMPLE_UASYNC_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_etcp_simple: $(TEST_ETCP_SIMPLE_OBJS) $(ETCP_OBJS) $(LL_QUEUE_OBJS) $(SIMPLE_UASYNC_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_u_async_comprehensive: $(TEST_U_ASYNC_COMPREHENSIVE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_u_async_simple: $(TEST_U_ASYNC_SIMPLE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_u_async_performance: $(TEST_U_ASYNC_PERFORMANCE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_debug_config: $(TEST_DEBUG_CONFIG_OBJS) $(OBJ_DIR)/u_async/debug_config.o
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_ll_queue_comprehensive: $(TEST_LL_QUEUE_COMPREHENSIVE_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_ecc_encrypt: $(TEST_ECC_ENCRYPT_OBJS) $(SC_LIB_OBJS) $(UASYNC_OBJS) $(TINYCRYPT_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
$(TEST_DIR)/test_routing: $(TEST_ROUTING_OBJS) $(CONFIG_PARSER_OBJS) $(ROUTING_OBJS) $(UASYNC_OBJS)
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
|
|
|
|
# Очистка
|
|
clean:
|
|
rm -rf $(OBJ_DIR)
|
|
rm -f utun \
|
|
$(TEST_DIR)/test_pkt_normalizer \
|
|
$(TEST_DIR)/test_etcp \
|
|
$(TEST_DIR)/test_etcp_stress \
|
|
$(TEST_DIR)/test_etcp_simple \
|
|
$(TEST_DIR)/test_u_async_comprehensive \
|
|
$(TEST_DIR)/test_u_async_simple \
|
|
$(TEST_DIR)/test_u_async_performance \
|
|
$(TEST_DIR)/test_debug_config \
|
|
$(TEST_DIR)/test_ll_queue_comprehensive \
|
|
$(TEST_DIR)/test_ecc_encrypt \
|
|
$(TEST_DIR)/test_routing
|
|
rm -f *.o $(TEST_DIR)/*.o tinycrypt/lib/source/*.o
|
|
|
|
.PHONY: all clean |