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 Dwivediint 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 Shaoint 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