1*0e8e60e8SDaniel Borkmann // SPDX-License-Identifier: GPL-2.0 2*0e8e60e8SDaniel Borkmann 3*0e8e60e8SDaniel Borkmann #include "vmlinux.h" 4*0e8e60e8SDaniel Borkmann #include <bpf/bpf_helpers.h> 5*0e8e60e8SDaniel Borkmann #include <bpf/bpf_tracing.h> 6*0e8e60e8SDaniel Borkmann 7*0e8e60e8SDaniel Borkmann SEC("xdp") 8*0e8e60e8SDaniel Borkmann int xdp_devmap(struct xdp_md *ctx) 9*0e8e60e8SDaniel Borkmann { 10*0e8e60e8SDaniel Borkmann return ctx->egress_ifindex; 11*0e8e60e8SDaniel Borkmann } 12*0e8e60e8SDaniel Borkmann 13*0e8e60e8SDaniel Borkmann struct { 14*0e8e60e8SDaniel Borkmann __uint(type, BPF_MAP_TYPE_PROG_ARRAY); 15*0e8e60e8SDaniel Borkmann __uint(max_entries, 1); 16*0e8e60e8SDaniel Borkmann __uint(key_size, sizeof(__u32)); 17*0e8e60e8SDaniel Borkmann __array(values, int (void *)); 18*0e8e60e8SDaniel Borkmann } xdp_map SEC(".maps") = { 19*0e8e60e8SDaniel Borkmann .values = { 20*0e8e60e8SDaniel Borkmann [0] = (void *)&xdp_devmap, 21*0e8e60e8SDaniel Borkmann }, 22*0e8e60e8SDaniel Borkmann }; 23*0e8e60e8SDaniel Borkmann 24*0e8e60e8SDaniel Borkmann SEC("xdp") 25*0e8e60e8SDaniel Borkmann int xdp_entry(struct xdp_md *ctx) 26*0e8e60e8SDaniel Borkmann { 27*0e8e60e8SDaniel Borkmann bpf_tail_call(ctx, &xdp_map, 0); 28*0e8e60e8SDaniel Borkmann return 0; 29*0e8e60e8SDaniel Borkmann } 30