Skip to content

Commit 3a0724f

Browse files
committed
tracing02-xdp-monitor: fix struct start offset for raw_tracepoint
This fix issue #48. When a tracepoint is used as raw_tracepoint, then the raw_tracepoint will not see the first 8 bytes of the struct described in the debugfs 'format' description for the tracepoint. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
1 parent 9278fdc commit 3a0724f

File tree

2 files changed

+37
-37
lines changed

2 files changed

+37
-37
lines changed

tracing02-xdp-monitor/trace_prog_kern.c

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ struct bpf_map_def SEC("maps") exception_cnt = {
1919
};
2020

2121
/* Tracepoint format: /sys/kernel/debug/tracing/events/xdp/xdp_redirect/format
22+
* Notice: For raw_tracepoints first 8 bytes are not part of 'format' struct
2223
* Code in: kernel/include/trace/events/xdp.h
2324
*/
2425
struct xdp_redirect_ctx {
25-
__u64 __pad; // First 8 bytes are not accessible by bpf code
26-
int prog_id; // offset:8; size:4; signed:1;
27-
__u32 act; // offset:12 size:4; signed:0;
28-
int ifindex; // offset:16 size:4; signed:1;
29-
int err; // offset:20 size:4; signed:1;
30-
int to_ifindex; // offset:24 size:4; signed:1;
31-
__u32 map_id; // offset:28 size:4; signed:0;
32-
int map_index; // offset:32 size:4; signed:1;
33-
}; // offset:36
26+
int prog_id; // offset: 0; size:4; signed:1;
27+
__u32 act; // offset: 4 size:4; signed:0;
28+
int ifindex; // offset: 8 size:4; signed:1;
29+
int err; // offset:12 size:4; signed:1;
30+
int to_ifindex; // offset:16 size:4; signed:1;
31+
__u32 map_id; // offset:20 size:4; signed:0;
32+
int map_index; // offset:24 size:4; signed:1;
33+
}; // offset:28
3434

3535
enum {
3636
XDP_REDIRECT_SUCCESS = 0,
@@ -88,13 +88,13 @@ int trace_xdp_redirect_map(struct xdp_redirect_ctx *ctx)
8888
}
8989

9090
/* Tracepoint format: /sys/kernel/debug/tracing/events/xdp/xdp_exception/format
91+
* Notice: For raw_tracepoints first 8 bytes are not part of 'format' struct
9192
* Code in: kernel/include/trace/events/xdp.h
9293
*/
9394
struct xdp_exception_ctx {
94-
__u64 __pad; // First 8 bytes are not accessible by bpf code
95-
int prog_id; // offset:8; size:4; signed:1;
96-
__u32 act; // offset:12; size:4; signed:0;
97-
int ifindex; // offset:16; size:4; signed:1;
95+
int prog_id; // offset:0; size:4; signed:1;
96+
__u32 act; // offset:4; size:4; signed:0;
97+
int ifindex; // offset:8; size:4; signed:1;
9898
};
9999

100100
SEC("raw_tracepoint/xdp/xdp_exception")
@@ -139,16 +139,16 @@ struct bpf_map_def SEC("maps") cpumap_kthread_cnt = {
139139
};
140140

141141
/* Tracepoint: /sys/kernel/debug/tracing/events/xdp/xdp_cpumap_enqueue/format
142+
* Notice: For raw_tracepoints first 8 bytes are not part of 'format' struct
142143
* Code in: kernel/include/trace/events/xdp.h
143144
*/
144145
struct cpumap_enqueue_ctx {
145-
__u64 __pad; // First 8 bytes are not accessible by bpf code
146-
int map_id; // offset:8; size:4; signed:1;
147-
__u32 act; // offset:12; size:4; signed:0;
148-
int cpu; // offset:16; size:4; signed:1;
149-
unsigned int drops; // offset:20; size:4; signed:0;
150-
unsigned int processed; // offset:24; size:4; signed:0;
151-
int to_cpu; // offset:28; size:4; signed:1;
146+
int map_id; // offset: 0; size:4; signed:1;
147+
__u32 act; // offset: 4; size:4; signed:0;
148+
int cpu; // offset: 8; size:4; signed:1;
149+
unsigned int drops; // offset:12; size:4; signed:0;
150+
unsigned int processed; // offset:16; size:4; signed:0;
151+
int to_cpu; // offset:20; size:4; signed:1;
152152
};
153153

154154
SEC("raw_tracepoint/xdp/xdp_cpumap_enqueue")
@@ -174,16 +174,16 @@ int trace_xdp_cpumap_enqueue(struct cpumap_enqueue_ctx *ctx)
174174
}
175175

176176
/* Tracepoint: /sys/kernel/debug/tracing/events/xdp/xdp_cpumap_kthread/format
177+
* Notice: For raw_tracepoints first 8 bytes are not part of 'format' struct
177178
* Code in: kernel/include/trace/events/xdp.h
178179
*/
179180
struct cpumap_kthread_ctx {
180-
__u64 __pad; // First 8 bytes are not accessible by bpf code
181-
int map_id; // offset:8; size:4; signed:1;
182-
__u32 act; // offset:12; size:4; signed:0;
183-
int cpu; // offset:16; size:4; signed:1;
184-
unsigned int drops; // offset:20; size:4; signed:0;
185-
unsigned int processed; // offset:24; size:4; signed:0;
186-
int sched; // offset:28; size:4; signed:1;
181+
int map_id; // offset: 0; size:4; signed:1;
182+
__u32 act; // offset: 4; size:4; signed:0;
183+
int cpu; // offset: 8; size:4; signed:1;
184+
unsigned int drops; // offset:12; size:4; signed:0;
185+
unsigned int processed; // offset:16; size:4; signed:0;
186+
int sched; // offset:20; size:4; signed:1;
187187
};
188188

189189
SEC("raw_tracepoint/xdp/xdp_cpumap_kthread")
@@ -214,18 +214,18 @@ struct bpf_map_def SEC("maps") devmap_xmit_cnt = {
214214
BPF_ANNOTATE_KV_PAIR(devmap_xmit_cnt, int, struct datarec);
215215

216216
/* Tracepoint: /sys/kernel/debug/tracing/events/xdp/xdp_devmap_xmit/format
217+
* Notice: For raw_tracepoints first 8 bytes are not part of 'format' struct
217218
* Code in: kernel/include/trace/events/xdp.h
218219
*/
219220
struct devmap_xmit_ctx {
220-
__u64 __pad; // First 8 bytes are not accessible by bpf code
221-
int map_id; // offset:8; size:4; signed:1;
222-
__u32 act; // offset:12; size:4; signed:0;
223-
__u32 map_index; // offset:16; size:4; signed:0;
224-
int drops; // offset:20; size:4; signed:1;
225-
int sent; // offset:24; size:4; signed:1;
226-
int from_ifindex; // offset:28; size:4; signed:1;
227-
int to_ifindex; // offset:32; size:4; signed:1;
228-
int err; // offset:36; size:4; signed:1;
221+
int map_id; // offset: 0; size:4; signed:1;
222+
__u32 act; // offset: 4; size:4; signed:0;
223+
__u32 map_index; // offset: 8; size:4; signed:0;
224+
int drops; // offset:12; size:4; signed:1;
225+
int sent; // offset:16; size:4; signed:1;
226+
int from_ifindex; // offset:20; size:4; signed:1;
227+
int to_ifindex; // offset:24; size:4; signed:1;
228+
int err; // offset:28; size:4; signed:1;
229229
};
230230

231231
SEC("raw_tracepoint/xdp/xdp_devmap_xmit")

0 commit comments

Comments
 (0)