int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size,
int max_entries)
{
- union bpf_attr attr = { 0 };
+ union bpf_attr attr;
+ memset(&attr, 0, sizeof(attr));
attr.map_type = map_type;
attr.key_size = key_size;
attr.value_size = value_size;
int bpf_update_elem(int fd, void *key, void *value, unsigned long long flags)
{
- union bpf_attr attr = { 0 };
+ union bpf_attr attr;
+ memset(&attr, 0, sizeof(attr));
attr.map_fd = fd;
attr.key = ptr_to_u64(key);
attr.value = ptr_to_u64(value);
int bpf_lookup_elem(int fd, void *key, void *value)
{
- union bpf_attr attr = { 0 };
+ union bpf_attr attr;
+ memset(&attr, 0, sizeof(attr));
attr.map_fd = fd;
attr.key = ptr_to_u64(key);
attr.value = ptr_to_u64(value);
int bpf_delete_elem(int fd, void *key)
{
- union bpf_attr attr = { 0 };
+ union bpf_attr attr;
+ memset(&attr, 0, sizeof(attr));
attr.map_fd = fd;
attr.key = ptr_to_u64(key);
return syscall(SYS_bpf, BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));
int bpf_get_next_key(int fd, void *key, void *next_key)
{
- union bpf_attr attr = { 0 };
+ union bpf_attr attr;
+ memset(&attr, 0, sizeof(attr));
attr.map_fd = fd;
attr.key = ptr_to_u64(key);
attr.next_key = ptr_to_u64(next_key);
const char *license, int kern_version)
{
char log_buf[65535];
- union bpf_attr attr = { 0 };
+ union bpf_attr attr;
+ memset(&attr, 0, sizeof(attr));
attr.prog_type = prog_type;
attr.insns = ptr_to_u64((void *) insns);
attr.insn_cnt = prog_len / sizeof(struct bpf_insn);
std::string keyStr = qname.toDNSStringLC();
if (keyStr.size() > sizeof(key.qname)) {
- throw std::runtime_error("Invalid QName to block " + qname.toString());
+ throw std::runtime_error("Invalid QName to block " + qname.toLogString());
}
memcpy(key.qname, keyStr.c_str(), keyStr.size());
{
std::unique_lock<std::mutex> lock(d_mutex);
if (d_qNamesCount >= d_maxQNames) {
- throw std::runtime_error("Table full when trying to block " + qname.toString());
+ throw std::runtime_error("Table full when trying to block " + qname.toLogString());
}
int res = bpf_lookup_elem(d_qnamemap.fd, &key, &value);
if (res != -1) {
- throw std::runtime_error("Trying to block an already blocked qname: " + qname.toString());
+ throw std::runtime_error("Trying to block an already blocked qname: " + qname.toLogString());
}
res = bpf_update_elem(d_qnamemap.fd, &key, &value, BPF_NOEXIST);
}
if (res != 0) {
- throw std::runtime_error("Error adding blocked qname " + qname.toString() + ": " + std::string(strerror(errno)));
+ throw std::runtime_error("Error adding blocked qname " + qname.toLogString() + ": " + std::string(strerror(errno)));
}
}
}
(void) qtype;
if (keyStr.size() > sizeof(key.qname)) {
- throw std::runtime_error("Invalid QName to block " + qname.toString());
+ throw std::runtime_error("Invalid QName to block " + qname.toLogString());
}
memcpy(key.qname, keyStr.c_str(), keyStr.size());
d_qNamesCount--;
}
else {
- throw std::runtime_error("Error removing qname address " + qname.toString() + ": " + std::string(strerror(errno)));
+ throw std::runtime_error("Error removing qname address " + qname.toLogString() + ": " + std::string(strerror(errno)));
}
}
}
uint32_t nextV4Key;
uint64_t value;
int res = bpf_get_next_key(d_v4map.fd, &v4Key, &nextV4Key);
- sockaddr_in v4Addr = { 0 };
- v4Addr.sin_port = 0;
+ sockaddr_in v4Addr;
+ memset(&v4Addr, 0, sizeof(v4Addr));
v4Addr.sin_family = AF_INET;
while (res == 0) {
uint8_t v6Key[16];
uint8_t nextV6Key[16];
- sockaddr_in6 v6Addr = { 0 };
+ sockaddr_in6 v6Addr;
+ memset(&v6Addr, 0, sizeof(v6Addr));
v6Addr.sin6_family = AF_INET6;
- v6Addr.sin6_port = 0;
+
static_assert(sizeof(v6Addr.sin6_addr.s6_addr) == sizeof(v6Key), "POSIX mandates s6_addr to be an array of 16 uint8_t");
for (size_t idx = 0; idx < sizeof(v6Key); idx++) {
v6Key[idx] = 0;