1d39aec79SDavid Ahern // SPDX-License-Identifier: GPL-2.0
2d39aec79SDavid Ahern /* fails to load without expected_attach_type = BPF_XDP_DEVMAP
3d39aec79SDavid Ahern  * because of access to egress_ifindex
4d39aec79SDavid Ahern  */
5042b1545SJesper Dangaard Brouer #include <linux/bpf.h>
6d39aec79SDavid Ahern #include <bpf/bpf_helpers.h>
7d39aec79SDavid Ahern 
8*a5c1c092SAndrii Nakryiko SEC("xdp")
xdpdm_devlog(struct xdp_md * ctx)9d39aec79SDavid Ahern int xdpdm_devlog(struct xdp_md *ctx)
10d39aec79SDavid Ahern {
11d39aec79SDavid Ahern 	char fmt[] = "devmap redirect: dev %u -> dev %u len %u\n";
12d39aec79SDavid Ahern 	void *data_end = (void *)(long)ctx->data_end;
13d39aec79SDavid Ahern 	void *data = (void *)(long)ctx->data;
14d39aec79SDavid Ahern 	unsigned int len = data_end - data;
15d39aec79SDavid Ahern 
16d39aec79SDavid Ahern 	bpf_trace_printk(fmt, sizeof(fmt),
17d39aec79SDavid Ahern 			 ctx->ingress_ifindex, ctx->egress_ifindex, len);
18d39aec79SDavid Ahern 
19d39aec79SDavid Ahern 	return XDP_PASS;
20d39aec79SDavid Ahern }
21d39aec79SDavid Ahern 
22d39aec79SDavid Ahern char _license[] SEC("license") = "GPL";
23