#include "daemon/tls.h"
#include "daemon/worker.h"
-#include <assert.h>
#include <libgen.h>
#include <net/if.h>
#include <sys/un.h>
const char *log_addr)
{
const bool ok = ep->flags.kind && !ep->handle && !ep->engaged && ep->fd != -1;
- if (!ok) {
- assert(!EINVAL);
+ if (!kr_assume(ok))
return kr_error(EINVAL);
- }
/* First find callback in the endpoint registry. */
lua_State *L = the_worker->engine->L;
void **pp = trie_get_try(net->endpoint_kinds, ep->flags.kind,
}
if (ep->flags.kind && !is_control && !is_xdp) {
- assert(!ep->handle);
+ (void)!kr_assume(!ep->handle);
/* Special lua-handled endpoint. */
if (ep->engaged) {
endpoint_close_lua_cb(net, ep);
}
free_const(ep->flags.kind); /* needed if (is_control) */
- assert(ep->handle);
+ kr_require(ep->handle);
if (force) { /* Force close if event loop isn't running. */
if (ep->fd >= 0) {
close(ep->fd);
? sa == NULL && ep->fd == -1 && ep->nic_queue >= 0
&& ep->flags.sock_type == SOCK_DGRAM && !ep->flags.tls
: (sa != NULL) != (ep->fd != -1);
- if (!ok) {
- assert(!EINVAL);
+ if (!kr_assume(ok))
return kr_error(EINVAL);
- }
if (ep->handle) {
return kr_error(EEXIST);
}
} /* else */
if (ep->flags.sock_type == SOCK_DGRAM) {
- if (ep->flags.tls) {
- assert(!EINVAL);
+ if (!kr_assume(!ep->flags.tls))
return kr_error(EINVAL);
- }
uv_udp_t *ep_handle = malloc(sizeof(uv_udp_t));
ep->handle = (uv_handle_t *)ep_handle;
ret = !ep->handle ? ENOMEM
goto finish_ret;
} /* else */
- assert(!EINVAL);
+ (void)!kr_assume(false);
return kr_error(EINVAL);
finish_ret:
if (!ret) return ret;
int network_listen_fd(struct network *net, int fd, endpoint_flags_t flags)
{
- if (flags.xdp) {
- assert(!EINVAL);
+ if (!kr_assume(!flags.xdp))
return kr_error(EINVAL);
- }
/* Extract fd's socket type. */
socklen_t len = sizeof(flags.sock_type);
int ret = getsockopt(fd, SOL_SOCKET, SO_TYPE, &flags.sock_type, &len);
- if (ret != 0) {
+ if (ret != 0)
return kr_error(errno);
- }
- if (flags.sock_type == SOCK_DGRAM && !flags.kind && flags.tls) {
- assert(!EINVAL); /* Perhaps DTLS some day. */
- return kr_error(EINVAL);
- }
- if (flags.sock_type != SOCK_DGRAM && flags.sock_type != SOCK_STREAM) {
+ const bool is_dtls = flags.sock_type == SOCK_DGRAM && !flags.kind && flags.tls;
+ if (!kr_assume(!is_dtls))
+ return kr_error(EINVAL); /* Perhaps DTLS some day. */
+ if (flags.sock_type != SOCK_DGRAM && flags.sock_type != SOCK_STREAM)
return kr_error(EBADF);
- }
/* Extract local address for this socket. */
struct sockaddr_storage ss = { .ss_family = AF_UNSPEC };
socklen_t addr_len = sizeof(ss);
ret = getsockname(fd, (struct sockaddr *)&ss, &addr_len);
- if (ret != 0) {
+ if (ret != 0)
return kr_error(errno);
- }
struct endpoint ep = {
.flags = flags,
int network_listen(struct network *net, const char *addr, uint16_t port,
int16_t nic_queue, endpoint_flags_t flags)
{
- if (net == NULL || addr == 0 || nic_queue < -1) {
- assert(!EINVAL);
+ if (!kr_assume(net != NULL && addr != 0 && nic_queue >= -1))
return kr_error(EINVAL);
- }
if (flags.xdp && nic_queue < 0) {
nic_queue = nic_queue_auto();
static int set_bpf_cb(const char *key, void *val, void *ext)
{
endpoint_array_t *endpoints = (endpoint_array_t *)val;
- assert(endpoints != NULL);
int *bpffd = (int *)ext;
- assert(bpffd != NULL);
+ if (!kr_assume(endpoints && bpffd))
+ return kr_error(EINVAL);
for (size_t i = 0; i < endpoints->len; i++) {
struct endpoint *endpoint = &endpoints->at[i];
uv_os_fd_t sockfd = -1;
if (endpoint->handle != NULL)
uv_fileno(endpoint->handle, &sockfd);
- assert(sockfd != -1);
+ kr_require(sockfd != -1);
if (setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_BPF, bpffd, sizeof(int)) != 0) {
return 1; /* return error (and stop iterating over net->endpoints) */
static int clear_bpf_cb(const char *key, void *val, void *ext)
{
endpoint_array_t *endpoints = (endpoint_array_t *)val;
- assert(endpoints != NULL);
+ if (!kr_assume(endpoints))
+ return kr_error(EINVAL);
for (size_t i = 0; i < endpoints->len; i++) {
struct endpoint *endpoint = &endpoints->at[i];
uv_os_fd_t sockfd = -1;
if (endpoint->handle != NULL)
uv_fileno(endpoint->handle, &sockfd);
- assert(sockfd != -1);
+ kr_require(sockfd != -1);
if (setsockopt(sockfd, SOL_SOCKET, SO_DETACH_BPF, NULL, 0) != 0) {
kr_log_error("[network] failed to clear SO_DETACH_BPF socket option\n");