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 Ahernint 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