From 6ad2dd2435ee490f57aec9af0f2f4fd4e44015f8 Mon Sep 17 00:00:00 2001 From: malmert Date: Sat, 7 Mar 2026 15:43:07 +0100 Subject: [PATCH] ebpf fix --- tools/ebpf/mark_packet_id.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tools/ebpf/mark_packet_id.c b/tools/ebpf/mark_packet_id.c index aadfe7b..57b7747 100644 --- a/tools/ebpf/mark_packet_id.c +++ b/tools/ebpf/mark_packet_id.c @@ -5,21 +5,29 @@ #define PACKET_ID_MASK 0x0FFFFFFF #define VERDICT_MASK 0xF0000000 +struct counter_state { + struct bpf_spin_lock lock; + __u32 value; +}; + struct { __uint(type, BPF_MAP_TYPE_ARRAY); __uint(max_entries, 1); __type(key, __u32); - __type(value, __u32); + __type(value, struct counter_state); } packet_counter SEC(".maps"); SEC("classifier") int classifier(struct __sk_buff *skb) { __u32 key = 0; - __u32 *counter = bpf_map_lookup_elem(&packet_counter, &key); + struct counter_state *state = bpf_map_lookup_elem(&packet_counter, &key); __u32 next = 1; - if (counter) { - next = __sync_add_and_fetch(counter, 1); + if (state) { + bpf_spin_lock(&state->lock); + state->value += 1; + next = state->value; + bpf_spin_unlock(&state->lock); } skb->mark = (skb->mark & VERDICT_MASK) | (next & PACKET_ID_MASK);