# Host-side tests for obu-firmware. See README.md: needs gcc and make on PATH (MSYS2 UCRT64), and # asn1tools under `py -3.11` for the replay check. # # make build and run everything: chain, replay, fuzz # make chain | replay | fuzz one of them # make fuzz FUZZ_ITER=50000000 FUZZ_SEED=7 a longer or different fuzz run # make clean remove build/ # # The firmware sources are compiled straight from ../../main, never copied. CC = gcc PYTHON = python PYTHON_ASN1 = py -3.11 FW = ../../main BUILD = build EXE = $(if $(filter Windows_NT,$(OS)),.exe,) # Captures live in capture/recordings/ since 2026-09-14; older ones are still in the # receiver checkout beside this repo. RECORDINGS = $(wildcard ../../../capture/recordings/*.pcap ../../../its-g5-receiver-firmware/recordings/*.pcap) FUZZ_ITER = 2000000 FUZZ_SEED = 1 # -Werror: these sources must stay warning-free on the host compiler too. # UBSan in trap mode needs no runtime library, so it works on MinGW; a trap shows up as a crash. CFLAGS = -std=c11 -O2 -g -Wall -Wextra -Wpedantic -Werror -I$(FW) \ -fsanitize=undefined -fsanitize-undefined-trap-on-error FW_SRCS = $(FW)/geonet.c $(FW)/dot11p.c $(FW)/gn_unwrap.c DEPS = test_util.c test_util.h $(FW_SRCS) $(wildcard $(FW)/*.h) .PHONY: all check chain replay fuzz clean all: check check: chain replay fuzz $(BUILD): mkdir -p $@ $(BUILD)/%$(EXE): %.c $(DEPS) | $(BUILD) $(CC) $(CFLAGS) -o $@ $< test_util.c $(FW_SRCS) # The pcap goes through pcap_gn_tally.py as a second, independent parser of the same frames. chain: $(BUILD)/test_chain$(EXE) $(BUILD)/test_chain$(EXE) $(BUILD)/test_chain.pcap $(PYTHON) ../pcap_gn_tally.py $(BUILD)/test_chain.pcap replay: $(BUILD)/test_replay$(EXE) ifeq ($(RECORDINGS),) @echo "replay: no recordings in ../../../its-g5-receiver-firmware/recordings, skipped" else $(BUILD)/test_replay$(EXE) $(BUILD)/replay.tsv $(RECORDINGS) $(PYTHON_ASN1) check_replay.py $(BUILD)/replay.tsv $(RECORDINGS) endif fuzz: $(BUILD)/fuzz_gn_unwrap$(EXE) $(BUILD)/fuzz_gn_unwrap$(EXE) $(FUZZ_ITER) $(FUZZ_SEED) $(RECORDINGS) clean: rm -rf $(BUILD)