mirror of
https://gitlab.nic.cz/knot/knot-dns.git
synced 2026-05-28 04:02:31 -04:00
y
This commit is contained in:
parent
44f94129af
commit
a5190d7352
6 changed files with 38 additions and 36 deletions
|
|
@ -321,7 +321,7 @@ redisContext *rdb_connect(conf_t *conf, bool require_master, const char *info)
|
|||
|
||||
conf_val_t db_listen = conf_db_param(conf, C_ZONE_DB_LISTEN);
|
||||
while (db_listen.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&db_listen, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(&db_listen, NULL, NULL);
|
||||
|
||||
rdb = (void *)conn_pool_get(global_redis_pool, &addr, &addr);
|
||||
if (rdb != NULL && (intptr_t)rdb != CONN_POOL_FD_INVALID) {
|
||||
|
|
@ -337,7 +337,7 @@ redisContext *rdb_connect(conf_t *conf, bool require_master, const char *info)
|
|||
|
||||
conf_val_reset(&db_listen);
|
||||
while (db_listen.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&db_listen, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(&db_listen, NULL, NULL);
|
||||
|
||||
if (rdb_addr_to_str(&addr, addr_str, sizeof(addr_str), &port) != KNOT_EOK ||
|
||||
(rdb = connect_addr(conf, addr_str, port)) == NULL) {
|
||||
|
|
|
|||
|
|
@ -724,6 +724,7 @@ const uint8_t* conf_data(
|
|||
struct sockaddr_storage conf_addr_alt(
|
||||
conf_val_t *val,
|
||||
const char *sock_base_dir,
|
||||
const char **dev_name,
|
||||
bool alternative)
|
||||
{
|
||||
assert(val != NULL && val->item != NULL);
|
||||
|
|
@ -737,7 +738,7 @@ struct sockaddr_storage conf_addr_alt(
|
|||
bool no_port;
|
||||
conf_val(val);
|
||||
assert(val->data);
|
||||
out = yp_addr(val->data, &no_port, NULL);
|
||||
out = yp_addr(val->data, &no_port, dev_name);
|
||||
|
||||
if (out.ss_family == AF_UNIX) {
|
||||
// val->data[0] is socket type identifier!
|
||||
|
|
@ -779,7 +780,7 @@ bool conf_addr_match(
|
|||
}
|
||||
|
||||
while (match->code == KNOT_EOK) {
|
||||
struct sockaddr_storage maddr = conf_addr(match, NULL);
|
||||
struct sockaddr_storage maddr = conf_addr(match, NULL, NULL);
|
||||
if (sockaddr_cmp(&maddr, addr, true) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1268,7 +1269,7 @@ size_t conf_xdp_threads_txn(
|
|||
|
||||
conf_val_t val = conf_get_txn(conf, txn, C_XDP, C_LISTEN);
|
||||
while (val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&val, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(&val, NULL, NULL);
|
||||
conf_xdp_iface_t iface;
|
||||
int ret = conf_xdp_iface(&addr, &iface);
|
||||
if (ret == KNOT_EOK) {
|
||||
|
|
@ -1405,22 +1406,22 @@ conf_remote_t conf_remote_txn(
|
|||
conf_val(&val);
|
||||
}
|
||||
|
||||
struct sockaddr_storage addr = conf_addr(&val, rundir);
|
||||
struct sockaddr_storage addr = conf_addr(&val, rundir, NULL);
|
||||
assert(addr.ss_family <= AF_INET6);
|
||||
addr_skipped[addr.ss_family]++;
|
||||
|
||||
conf_val_next(&val);
|
||||
}
|
||||
// Index overflow causes empty socket.
|
||||
out.addr = conf_addr_alt(&val, rundir, out.quic || out.tls);
|
||||
out.addr = conf_addr_alt(&val, rundir, NULL, out.quic || out.tls);
|
||||
|
||||
// Get outgoing address if family matches (optional).
|
||||
uint16_t via_pos = 0;
|
||||
val = conf_id_get_txn(conf, txn, C_RMT, C_VIA, id);
|
||||
while (val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage via = conf_addr(&val, rundir);
|
||||
struct sockaddr_storage via = conf_addr(&val, rundir, NULL);
|
||||
if (via.ss_family == out.addr.ss_family) {
|
||||
out.via = conf_addr(&val, rundir); // Use this candidate.
|
||||
out.via = conf_addr(&val, rundir, NULL); // Use this candidate.
|
||||
if (addr_skipped[out.addr.ss_family] <= via_pos++) {
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -556,6 +556,7 @@ const uint8_t* conf_data(
|
|||
*
|
||||
* \param[in] val Item value.
|
||||
* \param[in] sock_base_dir Path prefix for a relative UNIX socket location.
|
||||
* \param[out] dev_name Device name.
|
||||
* \param[in] alternative Use alternative default port if port not specified.
|
||||
*
|
||||
* \return Socket address.
|
||||
|
|
@ -563,13 +564,15 @@ const uint8_t* conf_data(
|
|||
struct sockaddr_storage conf_addr_alt(
|
||||
conf_val_t *val,
|
||||
const char *sock_base_dir,
|
||||
const char **dev_name,
|
||||
bool alternative
|
||||
);
|
||||
inline static struct sockaddr_storage conf_addr(
|
||||
conf_val_t *val,
|
||||
const char *sock_base_dir)
|
||||
const char *sock_base_dir,
|
||||
const char **dev_name)
|
||||
{
|
||||
return conf_addr_alt(val, sock_base_dir, false);
|
||||
return conf_addr_alt(val, sock_base_dir, dev_name, false);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -338,7 +338,7 @@ int check_xdp_listen(
|
|||
C_LISTEN);
|
||||
size_t count = conf_val_count(&xdp);
|
||||
while (xdp.code == KNOT_EOK && count-- > 1) {
|
||||
struct sockaddr_storage addr = conf_addr(&xdp, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(&xdp, NULL, NULL);
|
||||
conf_xdp_iface_t if_prev;
|
||||
ret = conf_xdp_iface(&addr, &if_prev);
|
||||
if (ret != KNOT_EOK) {
|
||||
|
|
@ -579,7 +579,7 @@ static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp_listen)
|
|||
}
|
||||
|
||||
while (xdp_listen->code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(xdp_listen, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(xdp_listen, NULL, NULL);
|
||||
conf_xdp_iface_t iface;
|
||||
int ret = conf_xdp_iface(&addr, &iface);
|
||||
if (ret != KNOT_EOK) {
|
||||
|
|
@ -603,8 +603,10 @@ static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp_listen)
|
|||
}
|
||||
|
||||
static bool listen_hit(const struct sockaddr_storage *ss1,
|
||||
const struct sockaddr_storage *ss2)
|
||||
const struct sockaddr_storage *ss2,
|
||||
const char *dev1, const char *dev2)
|
||||
{
|
||||
// TODO
|
||||
if (sockaddr_is_any(ss1) || sockaddr_is_any(ss2)) {
|
||||
return ss1->ss_family == ss2->ss_family &&
|
||||
sockaddr_port(ss1) == sockaddr_port(ss2);
|
||||
|
|
@ -623,11 +625,13 @@ static bool listen_overlaps(
|
|||
size_t listen_count = conf_val_count(&listen_val);
|
||||
|
||||
for (size_t i = 0; listen_count > 0 && i < chk_listen_count; i++) {
|
||||
struct sockaddr_storage chk_addr = conf_addr(chk_listen, NULL);
|
||||
const char *chk_dev = NULL;
|
||||
struct sockaddr_storage chk_addr = conf_addr(chk_listen, NULL, &chk_dev);
|
||||
|
||||
for (size_t j = 0; j < listen_count; j++) {
|
||||
struct sockaddr_storage listen_addr = conf_addr(&listen_val, NULL);
|
||||
if (listen_hit(&chk_addr, &listen_addr)) {
|
||||
const char *listen_dev = NULL;
|
||||
struct sockaddr_storage listen_addr = conf_addr(&listen_val, NULL, &listen_dev);
|
||||
if (listen_hit(&chk_addr, &listen_addr, chk_dev, listen_dev)) {
|
||||
return true;
|
||||
}
|
||||
conf_val_next(&listen_val);
|
||||
|
|
@ -715,7 +719,7 @@ int check_xdp(
|
|||
|
||||
while (xdp_listen.code == KNOT_EOK) {
|
||||
conf_xdp_iface_t iface;
|
||||
struct sockaddr_storage udp_addr = conf_addr(&xdp_listen, NULL);
|
||||
struct sockaddr_storage udp_addr = conf_addr(&xdp_listen, NULL, NULL);
|
||||
if (conf_xdp_iface(&udp_addr, &iface) == KNOT_EOK && iface.port == quic_port) {
|
||||
args->err_str = "QUIC has to listen on different port than UDP";
|
||||
return KNOT_EINVAL;
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ static void set_val(yp_type_t type, knotd_conf_val_t *item, conf_val_t *val)
|
|||
item->dname = conf_dname(val);
|
||||
break;
|
||||
case YP_TADDR:
|
||||
item->addr = conf_addr(val, NULL);
|
||||
item->addr = conf_addr(val, NULL, NULL);
|
||||
break;
|
||||
case YP_TNET:
|
||||
item->addr = conf_addr_range(val, &item->addr_max,
|
||||
|
|
|
|||
|
|
@ -704,18 +704,12 @@ static int configure_sockets(conf_t *conf, server_t *s)
|
|||
bool socket_affinity = conf->cache.srv_socket_affinity;
|
||||
char *rundir = conf_abs_path(&rundir_val, NULL);
|
||||
while (listen_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&listen_val, NULL);
|
||||
if (addr.ss_family == AF_UNIX) {
|
||||
conf_xdp_iface_t iface;
|
||||
if (conf_xdp_iface(&addr, &iface) != KNOT_EOK ||
|
||||
if_nametoindex(iface.name) == 0) {
|
||||
addr = conf_addr(&listen_val, rundir);
|
||||
}
|
||||
}
|
||||
|
||||
const char *dev = NULL;
|
||||
struct sockaddr_storage addr = conf_addr(&listen_val, NULL, &dev);
|
||||
char addr_str[SOCKADDR_STRLEN] = { 0 };
|
||||
sockaddr_tostr(addr_str, sizeof(addr_str), &addr);
|
||||
log_info("binding to interface %s", addr_str);
|
||||
log_info("binding to interface %s%s%s", addr_str,
|
||||
(dev != NULL ? " on " : ""), (dev != NULL ? dev : ""));
|
||||
|
||||
iface_t *new_if = server_init_iface(&addr, false, size_udp, size_tcp,
|
||||
tcp_reuseport, socket_affinity);
|
||||
|
|
@ -730,7 +724,7 @@ static int configure_sockets(conf_t *conf, server_t *s)
|
|||
conf_val_next(&listen_val);
|
||||
}
|
||||
while (liquic_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&liquic_val, rundir);
|
||||
struct sockaddr_storage addr = conf_addr(&liquic_val, rundir, NULL);
|
||||
char addr_str[SOCKADDR_STRLEN] = { 0 };
|
||||
sockaddr_tostr(addr_str, sizeof(addr_str), &addr);
|
||||
log_info("binding to QUIC interface %s", addr_str);
|
||||
|
|
@ -749,7 +743,7 @@ static int configure_sockets(conf_t *conf, server_t *s)
|
|||
conf_val_next(&liquic_val);
|
||||
}
|
||||
while (listls_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&listls_val, rundir);
|
||||
struct sockaddr_storage addr = conf_addr(&listls_val, rundir, NULL);
|
||||
char addr_str[SOCKADDR_STRLEN] = { 0 };
|
||||
sockaddr_tostr(addr_str, sizeof(addr_str), &addr);
|
||||
log_info("binding to TLS interface %s", addr_str);
|
||||
|
|
@ -780,7 +774,7 @@ static int configure_sockets(conf_t *conf, server_t *s)
|
|||
unsigned thread_id = s->handlers[IO_UDP].handler.unit->size +
|
||||
s->handlers[IO_TCP].handler.unit->size;
|
||||
while (lisxdp_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&lisxdp_val, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(&lisxdp_val, NULL, NULL);
|
||||
char addr_str[SOCKADDR_STRLEN] = { 0 };
|
||||
sockaddr_tostr(addr_str, sizeof(addr_str), &addr);
|
||||
log_info("binding to XDP interface %s", addr_str);
|
||||
|
|
@ -1355,7 +1349,7 @@ static bool listen_changed(conf_t *conf, server_t *server)
|
|||
|
||||
/* Find matching interfaces. */
|
||||
while (listen_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&listen_val, rundir);
|
||||
struct sockaddr_storage addr = conf_addr(&listen_val, rundir, NULL);
|
||||
bool found = false;
|
||||
for (size_t i = 0; i < server->n_ifaces; i++) {
|
||||
iface_t *iface = &server->ifaces[i];
|
||||
|
|
@ -1372,7 +1366,7 @@ static bool listen_changed(conf_t *conf, server_t *server)
|
|||
conf_val_next(&listen_val);
|
||||
}
|
||||
while (liquic_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&liquic_val, rundir);
|
||||
struct sockaddr_storage addr = conf_addr(&liquic_val, rundir, NULL);
|
||||
bool found = false;
|
||||
for (size_t i = 0; i < server->n_ifaces; i++) {
|
||||
iface_t *iface = &server->ifaces[i];
|
||||
|
|
@ -1389,7 +1383,7 @@ static bool listen_changed(conf_t *conf, server_t *server)
|
|||
conf_val_next(&liquic_val);
|
||||
}
|
||||
while (listls_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&listls_val, rundir);
|
||||
struct sockaddr_storage addr = conf_addr(&listls_val, rundir, NULL);
|
||||
bool found = false;
|
||||
for (size_t i = 0; i < server->n_ifaces; i++) {
|
||||
iface_t *iface = &server->ifaces[i];
|
||||
|
|
@ -1408,7 +1402,7 @@ static bool listen_changed(conf_t *conf, server_t *server)
|
|||
free(rundir);
|
||||
|
||||
while (lisxdp_val.code == KNOT_EOK) {
|
||||
struct sockaddr_storage addr = conf_addr(&lisxdp_val, NULL);
|
||||
struct sockaddr_storage addr = conf_addr(&lisxdp_val, NULL, NULL);
|
||||
bool found = false;
|
||||
for (size_t i = 0; i < server->n_ifaces; i++) {
|
||||
iface_t *iface = &server->ifaces[i];
|
||||
|
|
|
|||
Loading…
Reference in a new issue