27 lines
556 B
C
27 lines
556 B
C
// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
|
// Copyright (c) 2020 Anton Protopopov
|
|
#ifndef __MAPS_BPF_H
|
|
#define __MAPS_BPF_H
|
|
|
|
#include <bpf/bpf_helpers.h>
|
|
#include <asm-generic/errno.h>
|
|
|
|
static __always_inline void *
|
|
bpf_map_lookup_or_try_init(void *map, const void *key, const void *init)
|
|
{
|
|
void *val;
|
|
long err;
|
|
|
|
val = bpf_map_lookup_elem(map, key);
|
|
if (val)
|
|
return val;
|
|
|
|
err = bpf_map_update_elem(map, key, init, BPF_NOEXIST);
|
|
if (err && err != -EEXIST)
|
|
return 0;
|
|
|
|
return bpf_map_lookup_elem(map, key);
|
|
}
|
|
|
|
#endif /* __MAPS_BPF_H */
|