13573f384SYiFei Zhu // SPDX-License-Identifier: GPL-2.0-only
23573f384SYiFei Zhu 
33573f384SYiFei Zhu /*
43573f384SYiFei Zhu  * Copyright 2020 Google LLC.
53573f384SYiFei Zhu  */
63573f384SYiFei Zhu 
73573f384SYiFei Zhu #include <errno.h>
83573f384SYiFei Zhu #include <linux/bpf.h>
93573f384SYiFei Zhu #include <linux/ip.h>
103573f384SYiFei Zhu #include <linux/udp.h>
113573f384SYiFei Zhu #include <bpf/bpf_helpers.h>
123573f384SYiFei Zhu 
133573f384SYiFei Zhu #include "progs/cg_storage_multi.h"
143573f384SYiFei Zhu 
153573f384SYiFei Zhu struct {
163573f384SYiFei Zhu 	__uint(type, BPF_MAP_TYPE_CGROUP_STORAGE);
173573f384SYiFei Zhu 	__type(key, __u64);
183573f384SYiFei Zhu 	__type(value, struct cgroup_value);
193573f384SYiFei Zhu } cgroup_storage SEC(".maps");
203573f384SYiFei Zhu 
213573f384SYiFei Zhu __u32 invocations = 0;
223573f384SYiFei Zhu 
23*15669e1dSAndrii Nakryiko SEC("cgroup_skb/egress")
egress1(struct __sk_buff * skb)243573f384SYiFei Zhu int egress1(struct __sk_buff *skb)
253573f384SYiFei Zhu {
263573f384SYiFei Zhu 	struct cgroup_value *ptr_cg_storage =
273573f384SYiFei Zhu 		bpf_get_local_storage(&cgroup_storage, 0);
283573f384SYiFei Zhu 
293573f384SYiFei Zhu 	__sync_fetch_and_add(&ptr_cg_storage->egress_pkts, 1);
303573f384SYiFei Zhu 	__sync_fetch_and_add(&invocations, 1);
313573f384SYiFei Zhu 
323573f384SYiFei Zhu 	return 1;
333573f384SYiFei Zhu }
343573f384SYiFei Zhu 
35*15669e1dSAndrii Nakryiko SEC("cgroup_skb/egress")
egress2(struct __sk_buff * skb)363573f384SYiFei Zhu int egress2(struct __sk_buff *skb)
373573f384SYiFei Zhu {
383573f384SYiFei Zhu 	struct cgroup_value *ptr_cg_storage =
393573f384SYiFei Zhu 		bpf_get_local_storage(&cgroup_storage, 0);
403573f384SYiFei Zhu 
413573f384SYiFei Zhu 	__sync_fetch_and_add(&ptr_cg_storage->egress_pkts, 1);
423573f384SYiFei Zhu 	__sync_fetch_and_add(&invocations, 1);
433573f384SYiFei Zhu 
443573f384SYiFei Zhu 	return 1;
453573f384SYiFei Zhu }
463573f384SYiFei Zhu 
473573f384SYiFei Zhu SEC("cgroup_skb/ingress")
ingress(struct __sk_buff * skb)483573f384SYiFei Zhu int ingress(struct __sk_buff *skb)
493573f384SYiFei Zhu {
503573f384SYiFei Zhu 	struct cgroup_value *ptr_cg_storage =
513573f384SYiFei Zhu 		bpf_get_local_storage(&cgroup_storage, 0);
523573f384SYiFei Zhu 
533573f384SYiFei Zhu 	__sync_fetch_and_add(&ptr_cg_storage->ingress_pkts, 1);
543573f384SYiFei Zhu 	__sync_fetch_and_add(&invocations, 1);
553573f384SYiFei Zhu 
563573f384SYiFei Zhu 	return 1;
573573f384SYiFei Zhu }
58