170234fbfSEduard Zingerman // SPDX-License-Identifier: GPL-2.0 270234fbfSEduard Zingerman 370234fbfSEduard Zingerman #include <linux/bpf.h> 470234fbfSEduard Zingerman #include <bpf/bpf_helpers.h> 570234fbfSEduard Zingerman 670234fbfSEduard Zingerman __noinline changes_pkt_data(struct __sk_buff * sk)7*47e24c86SEduard Zingermanlong changes_pkt_data(struct __sk_buff *sk) 870234fbfSEduard Zingerman { 9*47e24c86SEduard Zingerman return bpf_skb_pull_data(sk, 0); 1070234fbfSEduard Zingerman } 1170234fbfSEduard Zingerman 1270234fbfSEduard Zingerman __noinline __weak does_not_change_pkt_data(struct __sk_buff * sk)13*47e24c86SEduard Zingermanlong does_not_change_pkt_data(struct __sk_buff *sk) 1470234fbfSEduard Zingerman { 1570234fbfSEduard Zingerman return 0; 1670234fbfSEduard Zingerman } 1770234fbfSEduard Zingerman 18*47e24c86SEduard Zingerman SEC("?tc") main_with_subprogs(struct __sk_buff * sk)19*47e24c86SEduard Zingermanint main_with_subprogs(struct __sk_buff *sk) 2070234fbfSEduard Zingerman { 21*47e24c86SEduard Zingerman changes_pkt_data(sk); 22*47e24c86SEduard Zingerman does_not_change_pkt_data(sk); 23*47e24c86SEduard Zingerman return 0; 24*47e24c86SEduard Zingerman } 25*47e24c86SEduard Zingerman 26*47e24c86SEduard Zingerman SEC("?tc") main_changes(struct __sk_buff * sk)27*47e24c86SEduard Zingermanint main_changes(struct __sk_buff *sk) 28*47e24c86SEduard Zingerman { 29*47e24c86SEduard Zingerman bpf_skb_pull_data(sk, 0); 30*47e24c86SEduard Zingerman return 0; 31*47e24c86SEduard Zingerman } 32*47e24c86SEduard Zingerman 33*47e24c86SEduard Zingerman SEC("?tc") main_does_not_change(struct __sk_buff * sk)34*47e24c86SEduard Zingermanint main_does_not_change(struct __sk_buff *sk) 35*47e24c86SEduard Zingerman { 3670234fbfSEduard Zingerman return 0; 3770234fbfSEduard Zingerman } 3870234fbfSEduard Zingerman 3970234fbfSEduard Zingerman char _license[] SEC("license") = "GPL"; 40