1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright (c) 2019 Facebook */
3#ifndef _BPF_SK_STORAGE_H
4#define _BPF_SK_STORAGE_H
5
6#include <linux/rculist.h>
7#include <linux/list.h>
8#include <linux/hash.h>
9#include <linux/types.h>
10#include <linux/spinlock.h>
11#include <linux/bpf.h>
12#include <net/sock.h>
13#include <uapi/linux/sock_diag.h>
14#include <uapi/linux/btf.h>
15#include <linux/bpf_local_storage.h>
16
17struct sock;
18
19void bpf_sk_storage_free(struct sock *sk);
20
21extern const struct bpf_func_proto bpf_sk_storage_get_proto;
22extern const struct bpf_func_proto bpf_sk_storage_delete_proto;
23extern const struct bpf_func_proto bpf_sk_storage_get_tracing_proto;
24extern const struct bpf_func_proto bpf_sk_storage_delete_tracing_proto;
25
26struct bpf_local_storage_elem;
27struct bpf_sk_storage_diag;
28struct sk_buff;
29struct nlattr;
30
31#ifdef CONFIG_BPF_SYSCALL
32int bpf_sk_storage_clone(const struct sock *sk, struct sock *newsk);
33struct bpf_sk_storage_diag *
34bpf_sk_storage_diag_alloc(const struct nlattr *nla_stgs);
35void bpf_sk_storage_diag_free(struct bpf_sk_storage_diag *diag);
36int bpf_sk_storage_diag_put(struct bpf_sk_storage_diag *diag,
37 struct sock *sk, struct sk_buff *skb,
38 int stg_array_type,
39 unsigned int *res_diag_size);
40#else
41static inline int bpf_sk_storage_clone(const struct sock *sk,
42 struct sock *newsk)
43{
44 return 0;
45}
46static inline struct bpf_sk_storage_diag *
47bpf_sk_storage_diag_alloc(const struct nlattr *nla)
48{
49 return NULL;
50}
51static inline void bpf_sk_storage_diag_free(struct bpf_sk_storage_diag *diag)
52{
53}
54static inline int bpf_sk_storage_diag_put(struct bpf_sk_storage_diag *diag,
55 struct sock *sk, struct sk_buff *skb,
56 int stg_array_type,
57 unsigned int *res_diag_size)
58{
59 return 0;
60}
61#endif
62
63#endif /* _BPF_SK_STORAGE_H */
64

source code of linux/include/net/bpf_sk_storage.h