1f18ba26dSKumar Kartikeya Dwivedi // SPDX-License-Identifier: GPL-2.0
2f18ba26dSKumar Kartikeya Dwivedi 
3f18ba26dSKumar Kartikeya Dwivedi #include <linux/bpf.h>
4f18ba26dSKumar Kartikeya Dwivedi #include <bpf/bpf_helpers.h>
5*0072e362SYafang Shao #include <linux/if_ether.h>
6*0072e362SYafang Shao #include <linux/ip.h>
7f18ba26dSKumar Kartikeya Dwivedi 
8f18ba26dSKumar Kartikeya Dwivedi /* Dummy prog to test TC-BPF API */
9f18ba26dSKumar Kartikeya Dwivedi 
10c22bdd28SAndrii Nakryiko SEC("tc")
cls(struct __sk_buff * skb)11f18ba26dSKumar Kartikeya Dwivedi int cls(struct __sk_buff *skb)
12f18ba26dSKumar Kartikeya Dwivedi {
13f18ba26dSKumar Kartikeya Dwivedi 	return 0;
14f18ba26dSKumar Kartikeya Dwivedi }
15*0072e362SYafang Shao 
16*0072e362SYafang Shao /* Prog to verify tc-bpf without cap_sys_admin and cap_perfmon */
17*0072e362SYafang Shao SEC("tcx/ingress")
pkt_ptr(struct __sk_buff * skb)18*0072e362SYafang Shao int pkt_ptr(struct __sk_buff *skb)
19*0072e362SYafang Shao {
20*0072e362SYafang Shao 	struct iphdr *iph = (void *)(long)skb->data + sizeof(struct ethhdr);
21*0072e362SYafang Shao 
22*0072e362SYafang Shao 	if ((long)(iph + 1) > (long)skb->data_end)
23*0072e362SYafang Shao 		return 1;
24*0072e362SYafang Shao 	return 0;
25*0072e362SYafang Shao }
26