13b1c420bSYonghong Song // SPDX-License-Identifier: GPL-2.0
23b1c420bSYonghong Song /* Copyright (c) 2020 Facebook */
33b1c420bSYonghong Song #include "bpf_iter.h"
43b1c420bSYonghong Song #include "bpf_tracing_net.h"
53b1c420bSYonghong Song #include <bpf/bpf_helpers.h>
63b1c420bSYonghong Song #include <bpf/bpf_tracing.h>
73b1c420bSYonghong Song 
83b1c420bSYonghong Song char _license[] SEC("license") = "GPL";
93b1c420bSYonghong Song 
103b1c420bSYonghong Song struct {
113b1c420bSYonghong Song 	__uint(type, BPF_MAP_TYPE_SK_STORAGE);
123b1c420bSYonghong Song 	__uint(map_flags, BPF_F_NO_PREALLOC);
133b1c420bSYonghong Song 	__type(key, int);
143b1c420bSYonghong Song 	__type(value, int);
153b1c420bSYonghong Song } sk_stg_map SEC(".maps");
163b1c420bSYonghong Song 
173b1c420bSYonghong Song __u32 val_sum = 0;
183b1c420bSYonghong Song __u32 ipv6_sk_count = 0;
19*939a1a94SHou Tao __u32 to_add_val = 0;
203b1c420bSYonghong Song 
213b1c420bSYonghong Song SEC("iter/bpf_sk_storage_map")
rw_bpf_sk_storage_map(struct bpf_iter__bpf_sk_storage_map * ctx)22*939a1a94SHou Tao int rw_bpf_sk_storage_map(struct bpf_iter__bpf_sk_storage_map *ctx)
233b1c420bSYonghong Song {
243b1c420bSYonghong Song 	struct sock *sk = ctx->sk;
253b1c420bSYonghong Song 	__u32 *val = ctx->value;
263b1c420bSYonghong Song 
27*939a1a94SHou Tao 	if (sk == NULL || val == NULL)
283b1c420bSYonghong Song 		return 0;
293b1c420bSYonghong Song 
303b1c420bSYonghong Song 	if (sk->sk_family == AF_INET6)
313b1c420bSYonghong Song 		ipv6_sk_count++;
323b1c420bSYonghong Song 
333b1c420bSYonghong Song 	val_sum += *val;
34*939a1a94SHou Tao 
35*939a1a94SHou Tao 	*val += to_add_val;
36*939a1a94SHou Tao 
37*939a1a94SHou Tao 	return 0;
38*939a1a94SHou Tao }
39*939a1a94SHou Tao 
40*939a1a94SHou Tao SEC("iter/bpf_sk_storage_map")
oob_write_bpf_sk_storage_map(struct bpf_iter__bpf_sk_storage_map * ctx)41*939a1a94SHou Tao int oob_write_bpf_sk_storage_map(struct bpf_iter__bpf_sk_storage_map *ctx)
42*939a1a94SHou Tao {
43*939a1a94SHou Tao 	struct sock *sk = ctx->sk;
44*939a1a94SHou Tao 	__u32 *val = ctx->value;
45*939a1a94SHou Tao 
46*939a1a94SHou Tao 	if (sk == NULL || val == NULL)
47*939a1a94SHou Tao 		return 0;
48*939a1a94SHou Tao 
49*939a1a94SHou Tao 	*(val + 1) = 0xdeadbeef;
50*939a1a94SHou Tao 
513b1c420bSYonghong Song 	return 0;
523b1c420bSYonghong Song }
53