brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · ee48c49 Raw
67 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <linux/bpf.h>3#include <bpf/bpf_tracing.h>4#include <bpf/bpf_helpers.h>5 6char _license[] SEC("license") = "GPL";7 8struct net_device {9	/* Structure does not need to contain all entries,10	 * as "preserve_access_index" will use BTF to fix this...11	 */12	int ifindex;13} __attribute__((preserve_access_index));14 15struct xdp_rxq_info {16	/* Structure does not need to contain all entries,17	 * as "preserve_access_index" will use BTF to fix this...18	 */19	struct net_device *dev;20	__u32 queue_index;21} __attribute__((preserve_access_index));22 23struct xdp_buff {24	void *data;25	void *data_end;26	void *data_meta;27	void *data_hard_start;28	unsigned long handle;29	struct xdp_rxq_info *rxq;30} __attribute__((preserve_access_index));31 32struct meta {33	int ifindex;34	int pkt_len;35};36 37struct {38	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);39	__type(key, int);40	__type(value, int);41} perf_buf_map SEC(".maps");42 43__u64 test_result_fentry = 0;44SEC("fentry/FUNC")45int BPF_PROG(trace_on_entry, struct xdp_buff *xdp)46{47	struct meta meta;48 49	meta.ifindex = xdp->rxq->dev->ifindex;50	meta.pkt_len = bpf_xdp_get_buff_len((struct xdp_md *)xdp);51	bpf_xdp_output(xdp, &perf_buf_map,52		       ((__u64) meta.pkt_len << 32) |53		       BPF_F_CURRENT_CPU,54		       &meta, sizeof(meta));55 56	test_result_fentry = xdp->rxq->dev->ifindex;57	return 0;58}59 60__u64 test_result_fexit = 0;61SEC("fexit/FUNC")62int BPF_PROG(trace_on_exit, struct xdp_buff *xdp, int ret)63{64	test_result_fexit = ret;65	return 0;66}67