From: Daniel Salzman Date: Mon, 19 Jul 2021 19:36:56 +0000 (+0200) Subject: conf: fix TCP processing detection, refactoring X-Git-Tag: v3.1.0~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bf4bb5d9a3f1a201a681219cb475a7a473717f0;p=thirdparty%2Fknot-dns.git conf: fix TCP processing detection, refactoring --- diff --git a/src/knot/conf/schema.c b/src/knot/conf/schema.c index 763fdbcd54..b26ef0a70e 100644 --- a/src/knot/conf/schema.c +++ b/src/knot/conf/schema.c @@ -209,7 +209,7 @@ static const yp_item_t desc_server[] = { { C_LISTEN, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI, { check_listen } }, { C_COMMENT, YP_TSTR, YP_VNONE }, // Legacy items. - { C_LISTEN_XDP, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI, { check_xdp_old } }, + { C_LISTEN_XDP, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI, { check_xdp_listen_old } }, { C_MAX_TCP_CLIENTS, YP_TINT, YP_VINT = { 0, INT32_MAX, YP_NIL } }, { C_TCP_HSHAKE_TIMEOUT, YP_TINT, YP_VINT = { 0, INT32_MAX, 5, YP_STIME } }, { C_TCP_REPLY_TIMEOUT, YP_TINT, YP_VINT = { 0, INT32_MAX, 10, YP_STIME } }, @@ -226,7 +226,7 @@ static const yp_item_t desc_server[] = { }; static const yp_item_t desc_xdp[] = { - { C_LISTEN, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI, { check_xdp } }, + { C_LISTEN, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI, { check_xdp_listen } }, { C_TCP, YP_TBOOL, YP_VNONE }, { C_TCP_MAX_CLIENTS, YP_TINT, YP_VINT = { 0, INT32_MAX, 1000000 } }, { C_TCP_INBUF_MAX_SIZE, YP_TINT, YP_VINT = { MEGA(1), SSIZE_MAX, MEGA(100), YP_SSIZE } }, @@ -456,7 +456,7 @@ const yp_item_t conf_schema[] = { { C_MODULE, YP_TGRP, YP_VGRP = { desc_module }, YP_FMULTI | CONF_IO_FRLD_ALL | CONF_IO_FCHECK_ZONES, { load_module } }, { C_SRV, YP_TGRP, YP_VGRP = { desc_server }, CONF_IO_FRLD_SRV, { check_server } }, - { C_XDP, YP_TGRP, YP_VGRP = { desc_xdp } }, + { C_XDP, YP_TGRP, YP_VGRP = { desc_xdp }, CONF_IO_FRLD_SRV, { check_xdp } }, { C_CTL, YP_TGRP, YP_VGRP = { desc_control } }, { C_LOG, YP_TGRP, YP_VGRP = { desc_log }, YP_FMULTI | CONF_IO_FRLD_LOG }, { C_STATS, YP_TGRP, YP_VGRP = { desc_stats }, CONF_IO_FRLD_SRV }, diff --git a/src/knot/conf/tools.c b/src/knot/conf/tools.c index 94d9aef003..f501dd5c0e 100644 --- a/src/knot/conf/tools.c +++ b/src/knot/conf/tools.c @@ -247,7 +247,7 @@ int check_listen( return KNOT_EOK; } -int check_xdp_old( +int check_xdp_listen_old( knotd_conf_check_args_t *args) { CONF_LOG(LOG_NOTICE, "option 'server.listen-xdp' is obsolete, " @@ -256,7 +256,7 @@ int check_xdp_old( return KNOT_EOK; } -int check_xdp( +int check_xdp_listen( knotd_conf_check_args_t *args) { #ifndef ENABLE_XDP @@ -363,7 +363,7 @@ int check_module_id( } \ } -static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp) +static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp_listen) { #ifdef ENABLE_XDP conf_val_t val = conf_get_txn(args->extra->conf, args->extra->txn, @@ -389,8 +389,8 @@ static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp) KNOT_XDP_MAX_MTU); } - while (xdp->code == KNOT_EOK) { - struct sockaddr_storage addr = conf_addr(xdp, NULL); + while (xdp_listen->code == KNOT_EOK) { + struct sockaddr_storage addr = conf_addr(xdp_listen, NULL); conf_xdp_iface_t iface; int ret = conf_xdp_iface(&addr, &iface); if (ret != KNOT_EOK) { @@ -408,7 +408,7 @@ static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp) CONF_LOG(LOG_WARNING, "maximum UDP payload not compatible " "with MTU of interface %s", iface.name); } - conf_val_next(xdp); + conf_val_next(xdp_listen); } #endif } @@ -416,19 +416,6 @@ static void check_mtu(knotd_conf_check_args_t *args, conf_val_t *xdp) int check_server( knotd_conf_check_args_t *args) { - conf_val_t listen = conf_get_txn(args->extra->conf, args->extra->txn, C_SRV, - C_LISTEN); - conf_val_t xdp = conf_get_txn(args->extra->conf, args->extra->txn, C_XDP, - C_LISTEN); - conf_val_t tcp = conf_get_txn(args->extra->conf, args->extra->txn, C_XDP, - C_TCP); - if (xdp.code == KNOT_EOK) { - if (listen.code != KNOT_EOK && tcp.code != KNOT_EOK) { - CONF_LOG(LOG_WARNING, "unavailable TCP processing"); - } - check_mtu(args, &xdp); - } - CHECK_LEGACY_NAME(C_SRV, C_TCP_REPLY_TIMEOUT, C_TCP_RMT_IO_TIMEOUT); CHECK_LEGACY_NAME(C_SRV, C_MAX_TCP_CLIENTS, C_TCP_MAX_CLIENTS); CHECK_LEGACY_NAME(C_SRV, C_MAX_UDP_PAYLOAD, C_UDP_MAX_PAYLOAD); @@ -438,6 +425,25 @@ int check_server( return KNOT_EOK; } +int check_xdp( + knotd_conf_check_args_t *args) +{ + conf_val_t xdp_listen = conf_get_txn(args->extra->conf, args->extra->txn, + C_XDP, C_LISTEN); + conf_val_t srv_listen = conf_get_txn(args->extra->conf, args->extra->txn, + C_SRV, C_LISTEN); + conf_val_t tcp = conf_get_txn(args->extra->conf, args->extra->txn, C_XDP, + C_TCP); + if (xdp_listen.code == KNOT_EOK) { + if (srv_listen.code != KNOT_EOK && tcp.code != KNOT_EOK) { + CONF_LOG(LOG_WARNING, "TCP processing not available"); + } + check_mtu(args, &xdp_listen); + } + + return KNOT_EOK; +} + int check_keystore( knotd_conf_check_args_t *args) { diff --git a/src/knot/conf/tools.h b/src/knot/conf/tools.h index c4d9865a23..55d5b41755 100644 --- a/src/knot/conf/tools.h +++ b/src/knot/conf/tools.h @@ -70,11 +70,11 @@ int check_listen( knotd_conf_check_args_t *args ); -int check_xdp_old( +int check_xdp_listen_old( knotd_conf_check_args_t *args ); -int check_xdp( +int check_xdp_listen( knotd_conf_check_args_t *args ); @@ -90,6 +90,10 @@ int check_server( knotd_conf_check_args_t *args ); +int check_xdp( + knotd_conf_check_args_t *args +); + int check_keystore( knotd_conf_check_args_t *args );