Commit e27afb84 authored by Alexei Starovoitov's avatar Alexei Starovoitov Committed by David S. Miller

selftests/bpf: fix broken build of test_maps

fix multiple build errors and warnings

1.
test_maps.c: In function ‘test_map_rdonly’:
test_maps.c:1051:30: error: ‘BPF_F_RDONLY’ undeclared (first use in this function)
        MAP_SIZE, map_flags | BPF_F_RDONLY);

2.
test_maps.c:1048:6: warning: unused variable ‘i’ [-Wunused-variable]
  int i, fd, key = 0, value = 0;

3.
test_maps.c:1087:2: error: called object is not a function or function pointer
  assert(bpf_map_lookup_elem(fd, &key, &value) == -1 && errno == EPERM);

4.
./bpf_helpers.h:72:11: error: use of undeclared identifier 'BPF_FUNC_getsockopt'
        (void *) BPF_FUNC_getsockopt;

Fixes: e043325b ("bpf: Add tests for eBPF file mode")
Fixes: 6e71b04a ("bpf: Add file mode configuration into bpf maps")
Fixes: cd86d1fd ("bpf: Adding helper function bpf_getsockops")
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f8ddadc4
...@@ -218,6 +218,10 @@ enum bpf_attach_type { ...@@ -218,6 +218,10 @@ enum bpf_attach_type {
#define BPF_OBJ_NAME_LEN 16U #define BPF_OBJ_NAME_LEN 16U
/* Flags for accessing BPF object */
#define BPF_F_RDONLY (1U << 3)
#define BPF_F_WRONLY (1U << 4)
union bpf_attr { union bpf_attr {
struct { /* anonymous struct used by BPF_MAP_CREATE command */ struct { /* anonymous struct used by BPF_MAP_CREATE command */
__u32 map_type; /* one of enum bpf_map_type */ __u32 map_type; /* one of enum bpf_map_type */
...@@ -260,6 +264,7 @@ union bpf_attr { ...@@ -260,6 +264,7 @@ union bpf_attr {
struct { /* anonymous struct used by BPF_OBJ_* commands */ struct { /* anonymous struct used by BPF_OBJ_* commands */
__aligned_u64 pathname; __aligned_u64 pathname;
__u32 bpf_fd; __u32 bpf_fd;
__u32 file_flags;
}; };
struct { /* anonymous struct used by BPF_PROG_ATTACH/DETACH commands */ struct { /* anonymous struct used by BPF_PROG_ATTACH/DETACH commands */
...@@ -287,6 +292,7 @@ union bpf_attr { ...@@ -287,6 +292,7 @@ union bpf_attr {
__u32 map_id; __u32 map_id;
}; };
__u32 next_id; __u32 next_id;
__u32 open_flags;
}; };
struct { /* anonymous struct used by BPF_OBJ_GET_INFO_BY_FD */ struct { /* anonymous struct used by BPF_OBJ_GET_INFO_BY_FD */
...@@ -607,12 +613,22 @@ union bpf_attr { ...@@ -607,12 +613,22 @@ union bpf_attr {
* int bpf_setsockopt(bpf_socket, level, optname, optval, optlen) * int bpf_setsockopt(bpf_socket, level, optname, optval, optlen)
* Calls setsockopt. Not all opts are available, only those with * Calls setsockopt. Not all opts are available, only those with
* integer optvals plus TCP_CONGESTION. * integer optvals plus TCP_CONGESTION.
* Supported levels: SOL_SOCKET and IPROTO_TCP * Supported levels: SOL_SOCKET and IPPROTO_TCP
* @bpf_socket: pointer to bpf_socket
* @level: SOL_SOCKET or IPPROTO_TCP
* @optname: option name
* @optval: pointer to option value
* @optlen: length of optval in bytes
* Return: 0 or negative error
*
* int bpf_getsockopt(bpf_socket, level, optname, optval, optlen)
* Calls getsockopt. Not all opts are available.
* Supported levels: IPPROTO_TCP
* @bpf_socket: pointer to bpf_socket * @bpf_socket: pointer to bpf_socket
* @level: SOL_SOCKET or IPROTO_TCP * @level: IPPROTO_TCP
* @optname: option name * @optname: option name
* @optval: pointer to option value * @optval: pointer to option value
* @optlen: length of optval in byes * @optlen: length of optval in bytes
* Return: 0 or negative error * Return: 0 or negative error
* *
* int bpf_skb_adjust_room(skb, len_diff, mode, flags) * int bpf_skb_adjust_room(skb, len_diff, mode, flags)
...@@ -623,10 +639,9 @@ union bpf_attr { ...@@ -623,10 +639,9 @@ union bpf_attr {
* @flags: reserved for future use * @flags: reserved for future use
* Return: 0 on success or negative error code * Return: 0 on success or negative error code
* *
* int bpf_sk_redirect_map(skb, map, key, flags) * int bpf_sk_redirect_map(map, key, flags)
* Redirect skb to a sock in map using key as a lookup key for the * Redirect skb to a sock in map using key as a lookup key for the
* sock in map. * sock in map.
* @skb: pointer to skb
* @map: pointer to sockmap * @map: pointer to sockmap
* @key: key to lookup sock in map * @key: key to lookup sock in map
* @flags: reserved for future use * @flags: reserved for future use
...@@ -643,6 +658,21 @@ union bpf_attr { ...@@ -643,6 +658,21 @@ union bpf_attr {
* @xdp_md: pointer to xdp_md * @xdp_md: pointer to xdp_md
* @delta: An positive/negative integer to be added to xdp_md.data_meta * @delta: An positive/negative integer to be added to xdp_md.data_meta
* Return: 0 on success or negative on error * Return: 0 on success or negative on error
*
* int bpf_perf_event_read_value(map, flags, buf, buf_size)
* read perf event counter value and perf event enabled/running time
* @map: pointer to perf_event_array map
* @flags: index of event in the map or bitmask flags
* @buf: buf to fill
* @buf_size: size of the buf
* Return: 0 on success or negative error code
*
* int bpf_perf_prog_read_value(ctx, buf, buf_size)
* read perf prog attached perf event counter and enabled/running time
* @ctx: pointer to ctx
* @buf: buf to fill
* @buf_size: size of the buf
* Return : 0 on success or negative error code
*/ */
#define __BPF_FUNC_MAPPER(FN) \ #define __BPF_FUNC_MAPPER(FN) \
FN(unspec), \ FN(unspec), \
...@@ -701,7 +731,8 @@ union bpf_attr { ...@@ -701,7 +731,8 @@ union bpf_attr {
FN(sock_map_update), \ FN(sock_map_update), \
FN(xdp_adjust_meta), \ FN(xdp_adjust_meta), \
FN(perf_event_read_value), \ FN(perf_event_read_value), \
FN(perf_prog_read_value), FN(perf_prog_read_value), \
FN(getsockopt),
/* integer value in 'imm' field of BPF_CALL instruction selects which helper /* integer value in 'imm' field of BPF_CALL instruction selects which helper
* function eBPF program intends to call * function eBPF program intends to call
...@@ -745,7 +776,9 @@ enum bpf_func_id { ...@@ -745,7 +776,9 @@ enum bpf_func_id {
#define BPF_F_ZERO_CSUM_TX (1ULL << 1) #define BPF_F_ZERO_CSUM_TX (1ULL << 1)
#define BPF_F_DONT_FRAGMENT (1ULL << 2) #define BPF_F_DONT_FRAGMENT (1ULL << 2)
/* BPF_FUNC_perf_event_output and BPF_FUNC_perf_event_read flags. */ /* BPF_FUNC_perf_event_output, BPF_FUNC_perf_event_read and
* BPF_FUNC_perf_event_read_value flags.
*/
#define BPF_F_INDEX_MASK 0xffffffffULL #define BPF_F_INDEX_MASK 0xffffffffULL
#define BPF_F_CURRENT_CPU BPF_F_INDEX_MASK #define BPF_F_CURRENT_CPU BPF_F_INDEX_MASK
/* BPF_FUNC_perf_event_output for sk_buff input context. */ /* BPF_FUNC_perf_event_output for sk_buff input context. */
...@@ -933,9 +966,22 @@ enum { ...@@ -933,9 +966,22 @@ enum {
BPF_SOCK_OPS_NEEDS_ECN, /* If connection's congestion control BPF_SOCK_OPS_NEEDS_ECN, /* If connection's congestion control
* needs ECN * needs ECN
*/ */
BPF_SOCK_OPS_BASE_RTT, /* Get base RTT. The correct value is
* based on the path and may be
* dependent on the congestion control
* algorithm. In general it indicates
* a congestion threshold. RTTs above
* this indicate congestion
*/
}; };
#define TCP_BPF_IW 1001 /* Set TCP initial congestion window */ #define TCP_BPF_IW 1001 /* Set TCP initial congestion window */
#define TCP_BPF_SNDCWND_CLAMP 1002 /* Set sndcwnd_clamp */ #define TCP_BPF_SNDCWND_CLAMP 1002 /* Set sndcwnd_clamp */
struct bpf_perf_event_value {
__u64 counter;
__u64 enabled;
__u64 running;
};
#endif /* _UAPI__LINUX_BPF_H__ */ #endif /* _UAPI__LINUX_BPF_H__ */
...@@ -1045,7 +1045,7 @@ static void test_map_parallel(void) ...@@ -1045,7 +1045,7 @@ static void test_map_parallel(void)
static void test_map_rdonly(void) static void test_map_rdonly(void)
{ {
int i, fd, key = 0, value = 0; int fd, key = 0, value = 0;
fd = bpf_create_map(BPF_MAP_TYPE_HASH, sizeof(key), sizeof(value), fd = bpf_create_map(BPF_MAP_TYPE_HASH, sizeof(key), sizeof(value),
MAP_SIZE, map_flags | BPF_F_RDONLY); MAP_SIZE, map_flags | BPF_F_RDONLY);
...@@ -1068,7 +1068,7 @@ static void test_map_rdonly(void) ...@@ -1068,7 +1068,7 @@ static void test_map_rdonly(void)
static void test_map_wronly(void) static void test_map_wronly(void)
{ {
int i, fd, key = 0, value = 0; int fd, key = 0, value = 0;
fd = bpf_create_map(BPF_MAP_TYPE_HASH, sizeof(key), sizeof(value), fd = bpf_create_map(BPF_MAP_TYPE_HASH, sizeof(key), sizeof(value),
MAP_SIZE, map_flags | BPF_F_WRONLY); MAP_SIZE, map_flags | BPF_F_WRONLY);
...@@ -1081,7 +1081,7 @@ static void test_map_wronly(void) ...@@ -1081,7 +1081,7 @@ static void test_map_wronly(void)
key = 1; key = 1;
value = 1234; value = 1234;
/* Insert key=1 element. */ /* Insert key=1 element. */
assert(bpf_map_update_elem(fd, &key, &value, BPF_ANY) == 0) assert(bpf_map_update_elem(fd, &key, &value, BPF_ANY) == 0);
/* Check that key=2 is not found. */ /* Check that key=2 is not found. */
assert(bpf_map_lookup_elem(fd, &key, &value) == -1 && errno == EPERM); assert(bpf_map_lookup_elem(fd, &key, &value) == -1 && errno == EPERM);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment