From 75fa37880c8f2cc29c905d972c7deb0ab803ae2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Feb 2026 21:12:21 +0000 Subject: [PATCH 2/4] build(mdig): enable LTO for smaller and faster binary Co-authored-by: vemneyy <78843201+vemneyy@users.noreply.github.com> --- mdig/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mdig/Makefile b/mdig/Makefile index e4a011bc..4e6ea66b 100644 --- a/mdig/Makefile +++ b/mdig/Makefile @@ -1,6 +1,6 @@ CC ?= cc OPTIMIZE ?= -Os -CFLAGS += -std=gnu99 $(OPTIMIZE) +CFLAGS += -std=gnu99 $(OPTIMIZE) -flto=auto CFLAGS_BSD = -Wno-address-of-packed-member CFLAGS_WIN = -static LIBS = -lpthread From 3bdbf9a6b33b5289d2bbeff7d23cd41a009dacd6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Feb 2026 21:16:26 +0000 Subject: [PATCH 3/4] perf(nfq): make delayed queue count O(1) Co-authored-by: vemneyy <78843201+vemneyy@users.noreply.github.com> --- nfq/packet_queue.c | 13 ++++++++----- nfq/packet_queue.h | 6 +++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/nfq/packet_queue.c b/nfq/packet_queue.c index 3c63b1cd..4888d590 100644 --- a/nfq/packet_queue.c +++ b/nfq/packet_queue.c @@ -7,6 +7,7 @@ void rawpacket_queue_init(struct rawpacket_tailhead *q) { TAILQ_INIT(q); + q->cached_count = 0; } void rawpacket_free(struct rawpacket *rp) { @@ -17,7 +18,11 @@ struct rawpacket *rawpacket_dequeue(struct rawpacket_tailhead *q) { struct rawpacket *rp; rp = TAILQ_FIRST(q); - if (rp) TAILQ_REMOVE(q, rp, next); + if (rp) + { + TAILQ_REMOVE(q, rp, next); + q->cached_count--; + } return rp; } void rawpacket_queue_destroy(struct rawpacket_tailhead *q) @@ -53,16 +58,14 @@ struct rawpacket *rawpacket_queue(struct rawpacket_tailhead *q,const struct sock rp->len_payload=len_payload; TAILQ_INSERT_TAIL(q, rp, next); + q->cached_count++; return rp; } unsigned int rawpacket_queue_count(const struct rawpacket_tailhead *q) { - const struct rawpacket *rp; - unsigned int ct=0; - TAILQ_FOREACH(rp, q, next) ct++; - return ct; + return q->cached_count; } bool rawpacket_queue_empty(const struct rawpacket_tailhead *q) { diff --git a/nfq/packet_queue.h b/nfq/packet_queue.h index 6d2c81c8..221f7f5b 100644 --- a/nfq/packet_queue.h +++ b/nfq/packet_queue.h @@ -15,7 +15,11 @@ struct rawpacket uint8_t *packet; TAILQ_ENTRY(rawpacket) next; }; -TAILQ_HEAD(rawpacket_tailhead, rawpacket); +struct rawpacket_tailhead { + struct rawpacket *tqh_first; + struct rawpacket **tqh_last; + unsigned int cached_count; +}; void rawpacket_queue_init(struct rawpacket_tailhead *q); void rawpacket_queue_destroy(struct rawpacket_tailhead *q); From ffd4c990668d59302ae0daf65627e04b66e5a56a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Feb 2026 21:18:03 +0000 Subject: [PATCH 4/4] refactor(nfq): wrap TAILQ head for compatibility Co-authored-by: vemneyy <78843201+vemneyy@users.noreply.github.com> --- nfq/packet_queue.c | 10 +++++----- nfq/packet_queue.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/nfq/packet_queue.c b/nfq/packet_queue.c index 4888d590..64a5ecad 100644 --- a/nfq/packet_queue.c +++ b/nfq/packet_queue.c @@ -6,7 +6,7 @@ void rawpacket_queue_init(struct rawpacket_tailhead *q) { - TAILQ_INIT(q); + TAILQ_INIT(&q->head); q->cached_count = 0; } void rawpacket_free(struct rawpacket *rp) @@ -17,10 +17,10 @@ void rawpacket_free(struct rawpacket *rp) struct rawpacket *rawpacket_dequeue(struct rawpacket_tailhead *q) { struct rawpacket *rp; - rp = TAILQ_FIRST(q); + rp = TAILQ_FIRST(&q->head); if (rp) { - TAILQ_REMOVE(q, rp, next); + TAILQ_REMOVE(&q->head, rp, next); q->cached_count--; } return rp; @@ -57,7 +57,7 @@ struct rawpacket *rawpacket_queue(struct rawpacket_tailhead *q,const struct sock rp->len=len; rp->len_payload=len_payload; - TAILQ_INSERT_TAIL(q, rp, next); + TAILQ_INSERT_TAIL(&q->head, rp, next); q->cached_count++; return rp; @@ -69,5 +69,5 @@ unsigned int rawpacket_queue_count(const struct rawpacket_tailhead *q) } bool rawpacket_queue_empty(const struct rawpacket_tailhead *q) { - return !TAILQ_FIRST(q); + return !TAILQ_FIRST(&q->head); } diff --git a/nfq/packet_queue.h b/nfq/packet_queue.h index 221f7f5b..8b218a7b 100644 --- a/nfq/packet_queue.h +++ b/nfq/packet_queue.h @@ -15,9 +15,9 @@ struct rawpacket uint8_t *packet; TAILQ_ENTRY(rawpacket) next; }; +TAILQ_HEAD(rawpacket_tailq, rawpacket); struct rawpacket_tailhead { - struct rawpacket *tqh_first; - struct rawpacket **tqh_last; + struct rawpacket_tailq head; unsigned int cached_count; };