Commit 8f80d450 authored by Julien Floret's avatar Julien Floret Committed by Stephen Hemminger

tc: fix compilation with old gcc (< 4.6)

gcc < 4.6 does not handle C11 syntax for the static initialization of
anonymous struct/union, hence the following error:

tc_bpf.c:260: error: unknown field map_type specified in initializer
Signed-off-by: default avatarJulien Floret <julien.floret@6wind.com>
Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent f921f567
......@@ -257,12 +257,14 @@ static bool bpf_may_skip_map_creation(int file_fd)
static int bpf_create_map(enum bpf_map_type type, unsigned int size_key,
unsigned int size_value, unsigned int max_elem)
{
union bpf_attr attr = {
.map_type = type,
.key_size = size_key,
.value_size = size_value,
.max_entries = max_elem,
};
union bpf_attr attr;
memset(&attr, 0, sizeof(attr));
attr.map_type = type;
attr.key_size = size_key;
attr.value_size = size_value;
attr.max_entries = max_elem;
return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
}
......@@ -270,12 +272,14 @@ static int bpf_create_map(enum bpf_map_type type, unsigned int size_key,
static int bpf_update_map(int fd, const void *key, const void *value,
uint64_t flags)
{
union bpf_attr attr = {
.map_fd = fd,
.key = bpf_ptr_to_u64(key),
.value = bpf_ptr_to_u64(value),
.flags = flags,
};
union bpf_attr attr;
memset(&attr, 0, sizeof(attr));
attr.map_fd = fd;
attr.key = bpf_ptr_to_u64(key);
attr.value = bpf_ptr_to_u64(value);
attr.flags = flags;
return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
}
......@@ -283,15 +287,17 @@ static int bpf_update_map(int fd, const void *key, const void *value,
static int bpf_prog_load(enum bpf_prog_type type, const struct bpf_insn *insns,
unsigned int len, const char *license)
{
union bpf_attr attr = {
.prog_type = type,
.insns = bpf_ptr_to_u64(insns),
.insn_cnt = len / sizeof(struct bpf_insn),
.license = bpf_ptr_to_u64(license),
.log_buf = bpf_ptr_to_u64(bpf_log_buf),
.log_size = sizeof(bpf_log_buf),
.log_level = 1,
};
union bpf_attr attr;
memset(&attr, 0, sizeof(attr));
attr.prog_type = type;
attr.insns = bpf_ptr_to_u64(insns);
attr.insn_cnt = len / sizeof(struct bpf_insn);
attr.license = bpf_ptr_to_u64(license);
attr.log_buf = bpf_ptr_to_u64(bpf_log_buf);
attr.log_size = sizeof(bpf_log_buf);
attr.log_level = 1;
return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
}
......
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