From: Willy Tarreau Date: Sat, 16 Jul 2022 15:17:22 +0000 (+0200) Subject: [RELEASE] Released version 2.7-dev2 X-Git-Tag: v2.7-dev2^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2200a9caefdc5fc8ae3a02da8cd48c9ea7e74a63;p=thirdparty%2Fhaproxy.git [RELEASE] Released version 2.7-dev2 Released version 2.7-dev2 with the following main changes : - BUG/MINOR: qpack: fix build with QPACK_DEBUG - MINOR: h3: handle errors on HEADERS parsing/QPACK decoding - BUG/MINOR: qpack: abort on dynamic index field line decoding - MINOR: qpack: properly handle invalid dynamic table references - MINOR: task: Add tasklet_wakeup_after() - BUG/MINOR: quic: Dropped packets not counted (with RX buffers full) - MINOR: quic: Add new stats counter to diagnose RX buffer overrun - MINOR: quic: Duplicated QUIC_RX_BUFSZ definition - MINOR: quic: Improvements for the datagrams receipt - CLEANUP: h2: Typo fix in h2_unsubcribe() traces - MINOR: quic: Increase the QUIC connections RX buffer size (upto 64Kb) - CLEANUP: mux-quic: adjust comment on qcs_consume() - MINOR: ncbuf: implement ncb_is_fragmented() - BUG/MINOR: mux-quic: do not signal FIN if gap in buffer - MINOR: fd: add a new FD_DISOWN flag to prevent from closing a deleted FD - BUG/MEDIUM: ssl/fd: unexpected fd close using async engine - MINOR: tinfo: make tid temporarily still reflect global ID - CLEANUP: config: remove unused proc_mask() - MINOR: debug: remove mask support from "debug dev sched" - MEDIUM: task: add and preset a thread ID in the task struct - MEDIUM: task/debug: move the ->thread_mask integrity checks to ->tid - MAJOR: task: use t->tid instead of ffsl(t->thread_mask) to take the thread ID - MAJOR: task: replace t->thread_mask with 1<tid when thread mask is needed - CLEANUP: task: remove thread_mask from the struct task - MEDIUM: applet: only keep appctx_new_*() and drop appctx_new() - MEDIUM: task: only keep task_new_*() and drop task_new() - MINOR: applet: always use task_new_on() on applet creation - MEDIUM: task: remove TASK_SHARED_WQ and only use t->tid - MINOR: task: replace task_set_affinity() with task_set_thread() - CLEANUP: task: remove the unused task_unlink_rq() - CLEANUP: task: remove the now unused TASK_GLOBAL flag - MINOR: task: make rqueue_ticks atomic - MEDIUM: task: move the shared runqueue to one per thread - MEDIUM: task: replace the global rq_lock with a per-rq one - MINOR: task: remove grq_total and use rq_total instead - MINOR: task: replace global_tasks_mask with a check for tree's emptiness - MEDIUM: task: use regular eb32 trees for the run queues - MEDIUM: queue: revert to regular inter-task wakeups - MINOR: thread: make wake_thread() take care of the sleeping threads mask - MINOR: thread: move the flags to the shared cache line - MINOR: thread: only use atomic ops to touch the flags - MINOR: poller: centralize poll return handling - MEDIUM: polling: make update_fd_polling() not care about sleeping threads - MINOR: poller: update_fd_polling: wake a random other thread - MEDIUM: thread: add a new per-thread flag TH_FL_NOTIFIED to remember wakeups - MEDIUM: tasks/fd: replace sleeping_thread_mask with a TH_FL_SLEEPING flag - MINOR: tinfo: add the tgid to the thread_info struct - MINOR: tinfo: replace the tgid with tgid_bit in tgroup_info - MINOR: tinfo: add the mask of enabled threads in each group - MINOR: debug: use ltid_bit in ha_thread_dump() - MINOR: wdt: use ltid_bit in wdt_handler() - MINOR: clock: use ltid_bit in clock_report_idle() - MINOR: thread: use ltid_bit in ha_tkillall() - MINOR: thread: add a new all_tgroups_mask variable to know about active tgroups - CLEANUP: thread: remove thread_sync_release() and thread_sync_mask - MEDIUM: tinfo: add a dynamic thread-group context - MEDIUM: thread: make stopping_threads per-group and add stopping_tgroups - MAJOR: threads: change thread_isolate to support inter-group synchronization - MINOR: thread: add is_thread_harmless() to know if a thread already is harmless - MINOR: debug: mark oneself harmless while waiting for threads to finish - MINOR: wdt: do not rely on threads_to_dump anymore - MEDIUM: debug: make the thread dumper not rely on a thread mask anymore - BUILD: debug: fix build issue on clang with previous commit - BUILD: debug: re-export thread_dump_state - BUG/MEDIUM: threads: fix incorrect thread group being used on soft-stop - BUG/MEDIUM: thread: check stopping thread against local bit and not global one - MINOR: proxy: use tg->threads_enabled in hard_stop() to detect stopped threads - BUILD: Makefile: Add Lua 5.4 autodetect - CI: re-enable gcc asan builds - MEDIUM: mworker: set the iocb of the socketpair without using fd_insert() - MINOR: fd: Add BUG_ON checks on fd_insert() - CLEANUP: mworker: rename mworker_pipe to mworker_sockpair - CLEANUP: mux-quic: do not export qc_get_ncbuf - REORG: mux-quic: reorganize flow-control fields - MINOR: mux-quic: implement accessor for sedesc - MEDIUM: mux-quic: refactor streams opening - MINOR: mux-quic: rename qcs flag FIN_RECV to SIZE_KNOWN - MINOR: mux-quic: emit FINAL_SIZE_ERROR on invalid STREAM size - BUG/MINOR: peers/config: always fill the bind_conf's argument - BUG/MEDIUM: peers/config: properly set the thread mask - CLEANUP: bwlim: Set pointers to NULL when memory is released - BUG/MINOR: http-check: Preserve headers if not redefined by an implicit rule - BUG/MINOR: http-act: Properly generate 103 responses when several rules are used - BUG/MEDIUM: thread: mask stopping_threads with threads_enabled when checking it - CLEANUP: thread: also remove a thread's bit from stopping_threads on stop - BUG/MINOR: peers: fix possible NULL dereferences at config parsing - BUG/MINOR: http-htx: Fix scheme based normalization for URIs wih userinfo - MINOR: http: Add function to get port part of a host - MINOR: http: Add function to detect default port - BUG/MEDIUM: h1: Improve authority validation for CONNCET request - MINOR: http-htx: Use new HTTP functions for the scheme based normalization - BUG/MEDIUM: http-fetch: Don't fetch the method if there is no stream - REGTEESTS: filters: Fix CONNECT request in random-forwarding script - MEDIUM: mworker/systemd: send STATUS over sd_notify - BUG/MINOR: mux-h1: Be sure to commit htx changes in the demux buffer - BUG/MEDIUM: http-ana: Don't wait to have an empty buf to switch in TUNNEL state - BUG/MEDIUM: mux-h1: Handle connection error after a synchronous send - MEDIUM: epoll: don't synchronously delete migrated FDs - BUILD: debug: silence warning on gcc-5 - BUILD: http: silence an uninitialized warning affecting gcc-5 - BUG/MEDIUM: mux-quic: fix server chunked encoding response - REORG: mux-quic: rename stream initialization function - MINOR: mux-quic: rename stream purge function - MINOR: mux-quic: add traces on frame parsing functions - MINOR: mux-quic: implement qcs_alert() - MINOR: mux-quic: filter send/receive-only streams on frame parsing - MINOR: mux-quic: do not ack STREAM frames on unrecoverable error - MINOR: mux-quic: support stream opening via MAX_STREAM_DATA - MINOR: mux-quic: define basic stream states - MINOR: mux-quic: use stream states to mark as detached - MEDIUM: mux-quic: implement RESET_STREAM emission - MEDIUM: mux-quic: implement STOP_SENDING handling - BUG/MEDIUM: debug: fix possible hang when multiple threads dump at once - BUG/MINOR: quic: fix closing state on NO_ERROR code sent - CLEANUP: quic: clean up include on quic_frame-t.h - MINOR: quic: define a generic QUIC error type - MINOR: mux-quic: support app graceful shutdown - MINOR: mux-quic/h3: prepare CONNECTION_CLOSE on release - MEDIUM: quic: send CONNECTION_CLOSE on released MUX - CLEANUP: mux-quic: move qc_release() - MINOR: mux-quic: send one last time before release - MINOR: h3: store control stream in h3c - MINOR: h3: implement graceful shutdown with GOAWAY - BUG/MINOR: threads: produce correct global mask for tgroup > 1 - BUG/MEDIUM: cli/threads: make "show threads" more robust on applets - BUG/MINOR: thread: use the correct thread's group in ha_tkillall() - BUG/MINOR: debug: enter ha_panic() only once - BUG/MEDIUM: debug: fix parallel thread dumps again - MINOR: cli/streams: show a stream's tgid next to its thread ID - DEBUG: cli: add a new "debug dev deadlock" expert command - MINOR: cli/activity: add a thread number argument to "show activity" - CLEANUP: applet: remove the obsolete command context from the appctx - MEDIUM: config: remove deprecated "bind-process" directives from frontends - MEDIUM: config: remove the "process" keyword on "bind" lines - MINOR: listener/config: make "thread" always support up to LONGBITS - CLEANUP: fd: get rid of the __GET_{NEXT,PREV} macros - MEDIUM: debug/threads: make the lock debugging take tgroups into account - MEDIUM: proto: stop protocols under thread isolation during soft stop - MEDIUM: poller: program the update in fd_update_events() for a migrated FD - MEDIUM: poller: disable thread-groups for poll() and select() - MINOR: thread: remove MAX_THREADS limitation - MEDIUM: cpu-map: replace the process number with the thread group number - MINOR: mworker/threads: limit the mworker sockets to group 1 - MINOR: cli/threads: always bind CLI to thread group 1 - MINOR: fd/thread: get rid of thread_mask() - MEDIUM: task/thread: move the task shared wait queues per thread group - MINOR: task: move the niced_tasks counter to the thread group context - DOC: design: add some thoughts about how to handle the update_list - MEDIUM: conn: make conn_backend_get always scan the same group - MAJOR: fd: remove pending updates upon real close - MEDIUM: fd/poller: make the update-list per-group - MINOR: fd: delete unused updates on close() - MINOR: fd: make fd_insert() apply the thread mask itself - MEDIUM: fd: add the tgid to the fd and pass it to fd_insert() - MINOR: cli/fd: show fd's tgid and refcount in "show fd" - MINOR: fd: add functions to manipulate the FD's tgid - MINOR: fd: add fd_get_running() to atomically return the running mask - MAJOR: fd: grab the tgid before manipulating running - MEDIUM: fd/poller: turn polled_mask to group-local IDs - MEDIUM: fd/poller: turn update_mask to group-local IDs - MEDIUM: fd/poller: turn running_mask to group-local IDs - MINOR: fd: make fd_clr_running() return the previous value instead - MEDIUM: fd: make thread_mask now represent group-local IDs - MEDIUM: fd: make fd_insert() take local thread masks - MEDIUM: fd: make fd_insert/fd_delete atomically update fd.tgid - MEDIUM: fd: quit fd_update_events() when FD is closed - MEDIUM: thread: change thread_resolve_group_mask() to return group-local values - MEDIUM: listener: switch bind_thread from global to group-local - MINOR: fd: add fd_reregister_all() to deal with boot-time FDs - MEDIUM: fd: support stopping FDs during starting - MAJOR: pollers: rely on fd_reregister_all() at boot time - MAJOR: poller: only touch/inspect the update_mask under tgid protection - MEDIUM: fd: support broadcasting updates for foreign groups in updt_fd_polling - CLEANUP: threads: remove the now unused all_threads_mask and tid_bit - MINOR: config: change default MAX_TGROUPS to 16 - BUG/MEDIUM: tools: avoid calling dlsym() in static builds --- diff --git a/CHANGELOG b/CHANGELOG index 6a5cd84ae2..5d42affdd9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,184 @@ ChangeLog : =========== +2022/07/16 : 2.7-dev2 + - BUG/MINOR: qpack: fix build with QPACK_DEBUG + - MINOR: h3: handle errors on HEADERS parsing/QPACK decoding + - BUG/MINOR: qpack: abort on dynamic index field line decoding + - MINOR: qpack: properly handle invalid dynamic table references + - MINOR: task: Add tasklet_wakeup_after() + - BUG/MINOR: quic: Dropped packets not counted (with RX buffers full) + - MINOR: quic: Add new stats counter to diagnose RX buffer overrun + - MINOR: quic: Duplicated QUIC_RX_BUFSZ definition + - MINOR: quic: Improvements for the datagrams receipt + - CLEANUP: h2: Typo fix in h2_unsubcribe() traces + - MINOR: quic: Increase the QUIC connections RX buffer size (upto 64Kb) + - CLEANUP: mux-quic: adjust comment on qcs_consume() + - MINOR: ncbuf: implement ncb_is_fragmented() + - BUG/MINOR: mux-quic: do not signal FIN if gap in buffer + - MINOR: fd: add a new FD_DISOWN flag to prevent from closing a deleted FD + - BUG/MEDIUM: ssl/fd: unexpected fd close using async engine + - MINOR: tinfo: make tid temporarily still reflect global ID + - CLEANUP: config: remove unused proc_mask() + - MINOR: debug: remove mask support from "debug dev sched" + - MEDIUM: task: add and preset a thread ID in the task struct + - MEDIUM: task/debug: move the ->thread_mask integrity checks to ->tid + - MAJOR: task: use t->tid instead of ffsl(t->thread_mask) to take the thread ID + - MAJOR: task: replace t->thread_mask with 1<tid when thread mask is needed + - CLEANUP: task: remove thread_mask from the struct task + - MEDIUM: applet: only keep appctx_new_*() and drop appctx_new() + - MEDIUM: task: only keep task_new_*() and drop task_new() + - MINOR: applet: always use task_new_on() on applet creation + - MEDIUM: task: remove TASK_SHARED_WQ and only use t->tid + - MINOR: task: replace task_set_affinity() with task_set_thread() + - CLEANUP: task: remove the unused task_unlink_rq() + - CLEANUP: task: remove the now unused TASK_GLOBAL flag + - MINOR: task: make rqueue_ticks atomic + - MEDIUM: task: move the shared runqueue to one per thread + - MEDIUM: task: replace the global rq_lock with a per-rq one + - MINOR: task: remove grq_total and use rq_total instead + - MINOR: task: replace global_tasks_mask with a check for tree's emptiness + - MEDIUM: task: use regular eb32 trees for the run queues + - MEDIUM: queue: revert to regular inter-task wakeups + - MINOR: thread: make wake_thread() take care of the sleeping threads mask + - MINOR: thread: move the flags to the shared cache line + - MINOR: thread: only use atomic ops to touch the flags + - MINOR: poller: centralize poll return handling + - MEDIUM: polling: make update_fd_polling() not care about sleeping threads + - MINOR: poller: update_fd_polling: wake a random other thread + - MEDIUM: thread: add a new per-thread flag TH_FL_NOTIFIED to remember wakeups + - MEDIUM: tasks/fd: replace sleeping_thread_mask with a TH_FL_SLEEPING flag + - MINOR: tinfo: add the tgid to the thread_info struct + - MINOR: tinfo: replace the tgid with tgid_bit in tgroup_info + - MINOR: tinfo: add the mask of enabled threads in each group + - MINOR: debug: use ltid_bit in ha_thread_dump() + - MINOR: wdt: use ltid_bit in wdt_handler() + - MINOR: clock: use ltid_bit in clock_report_idle() + - MINOR: thread: use ltid_bit in ha_tkillall() + - MINOR: thread: add a new all_tgroups_mask variable to know about active tgroups + - CLEANUP: thread: remove thread_sync_release() and thread_sync_mask + - MEDIUM: tinfo: add a dynamic thread-group context + - MEDIUM: thread: make stopping_threads per-group and add stopping_tgroups + - MAJOR: threads: change thread_isolate to support inter-group synchronization + - MINOR: thread: add is_thread_harmless() to know if a thread already is harmless + - MINOR: debug: mark oneself harmless while waiting for threads to finish + - MINOR: wdt: do not rely on threads_to_dump anymore + - MEDIUM: debug: make the thread dumper not rely on a thread mask anymore + - BUILD: debug: fix build issue on clang with previous commit + - BUILD: debug: re-export thread_dump_state + - BUG/MEDIUM: threads: fix incorrect thread group being used on soft-stop + - BUG/MEDIUM: thread: check stopping thread against local bit and not global one + - MINOR: proxy: use tg->threads_enabled in hard_stop() to detect stopped threads + - BUILD: Makefile: Add Lua 5.4 autodetect + - CI: re-enable gcc asan builds + - MEDIUM: mworker: set the iocb of the socketpair without using fd_insert() + - MINOR: fd: Add BUG_ON checks on fd_insert() + - CLEANUP: mworker: rename mworker_pipe to mworker_sockpair + - CLEANUP: mux-quic: do not export qc_get_ncbuf + - REORG: mux-quic: reorganize flow-control fields + - MINOR: mux-quic: implement accessor for sedesc + - MEDIUM: mux-quic: refactor streams opening + - MINOR: mux-quic: rename qcs flag FIN_RECV to SIZE_KNOWN + - MINOR: mux-quic: emit FINAL_SIZE_ERROR on invalid STREAM size + - BUG/MINOR: peers/config: always fill the bind_conf's argument + - BUG/MEDIUM: peers/config: properly set the thread mask + - CLEANUP: bwlim: Set pointers to NULL when memory is released + - BUG/MINOR: http-check: Preserve headers if not redefined by an implicit rule + - BUG/MINOR: http-act: Properly generate 103 responses when several rules are used + - BUG/MEDIUM: thread: mask stopping_threads with threads_enabled when checking it + - CLEANUP: thread: also remove a thread's bit from stopping_threads on stop + - BUG/MINOR: peers: fix possible NULL dereferences at config parsing + - BUG/MINOR: http-htx: Fix scheme based normalization for URIs wih userinfo + - MINOR: http: Add function to get port part of a host + - MINOR: http: Add function to detect default port + - BUG/MEDIUM: h1: Improve authority validation for CONNCET request + - MINOR: http-htx: Use new HTTP functions for the scheme based normalization + - BUG/MEDIUM: http-fetch: Don't fetch the method if there is no stream + - REGTEESTS: filters: Fix CONNECT request in random-forwarding script + - MEDIUM: mworker/systemd: send STATUS over sd_notify + - BUG/MINOR: mux-h1: Be sure to commit htx changes in the demux buffer + - BUG/MEDIUM: http-ana: Don't wait to have an empty buf to switch in TUNNEL state + - BUG/MEDIUM: mux-h1: Handle connection error after a synchronous send + - MEDIUM: epoll: don't synchronously delete migrated FDs + - BUILD: debug: silence warning on gcc-5 + - BUILD: http: silence an uninitialized warning affecting gcc-5 + - BUG/MEDIUM: mux-quic: fix server chunked encoding response + - REORG: mux-quic: rename stream initialization function + - MINOR: mux-quic: rename stream purge function + - MINOR: mux-quic: add traces on frame parsing functions + - MINOR: mux-quic: implement qcs_alert() + - MINOR: mux-quic: filter send/receive-only streams on frame parsing + - MINOR: mux-quic: do not ack STREAM frames on unrecoverable error + - MINOR: mux-quic: support stream opening via MAX_STREAM_DATA + - MINOR: mux-quic: define basic stream states + - MINOR: mux-quic: use stream states to mark as detached + - MEDIUM: mux-quic: implement RESET_STREAM emission + - MEDIUM: mux-quic: implement STOP_SENDING handling + - BUG/MEDIUM: debug: fix possible hang when multiple threads dump at once + - BUG/MINOR: quic: fix closing state on NO_ERROR code sent + - CLEANUP: quic: clean up include on quic_frame-t.h + - MINOR: quic: define a generic QUIC error type + - MINOR: mux-quic: support app graceful shutdown + - MINOR: mux-quic/h3: prepare CONNECTION_CLOSE on release + - MEDIUM: quic: send CONNECTION_CLOSE on released MUX + - CLEANUP: mux-quic: move qc_release() + - MINOR: mux-quic: send one last time before release + - MINOR: h3: store control stream in h3c + - MINOR: h3: implement graceful shutdown with GOAWAY + - BUG/MINOR: threads: produce correct global mask for tgroup > 1 + - BUG/MEDIUM: cli/threads: make "show threads" more robust on applets + - BUG/MINOR: thread: use the correct thread's group in ha_tkillall() + - BUG/MINOR: debug: enter ha_panic() only once + - BUG/MEDIUM: debug: fix parallel thread dumps again + - MINOR: cli/streams: show a stream's tgid next to its thread ID + - DEBUG: cli: add a new "debug dev deadlock" expert command + - MINOR: cli/activity: add a thread number argument to "show activity" + - CLEANUP: applet: remove the obsolete command context from the appctx + - MEDIUM: config: remove deprecated "bind-process" directives from frontends + - MEDIUM: config: remove the "process" keyword on "bind" lines + - MINOR: listener/config: make "thread" always support up to LONGBITS + - CLEANUP: fd: get rid of the __GET_{NEXT,PREV} macros + - MEDIUM: debug/threads: make the lock debugging take tgroups into account + - MEDIUM: proto: stop protocols under thread isolation during soft stop + - MEDIUM: poller: program the update in fd_update_events() for a migrated FD + - MEDIUM: poller: disable thread-groups for poll() and select() + - MINOR: thread: remove MAX_THREADS limitation + - MEDIUM: cpu-map: replace the process number with the thread group number + - MINOR: mworker/threads: limit the mworker sockets to group 1 + - MINOR: cli/threads: always bind CLI to thread group 1 + - MINOR: fd/thread: get rid of thread_mask() + - MEDIUM: task/thread: move the task shared wait queues per thread group + - MINOR: task: move the niced_tasks counter to the thread group context + - DOC: design: add some thoughts about how to handle the update_list + - MEDIUM: conn: make conn_backend_get always scan the same group + - MAJOR: fd: remove pending updates upon real close + - MEDIUM: fd/poller: make the update-list per-group + - MINOR: fd: delete unused updates on close() + - MINOR: fd: make fd_insert() apply the thread mask itself + - MEDIUM: fd: add the tgid to the fd and pass it to fd_insert() + - MINOR: cli/fd: show fd's tgid and refcount in "show fd" + - MINOR: fd: add functions to manipulate the FD's tgid + - MINOR: fd: add fd_get_running() to atomically return the running mask + - MAJOR: fd: grab the tgid before manipulating running + - MEDIUM: fd/poller: turn polled_mask to group-local IDs + - MEDIUM: fd/poller: turn update_mask to group-local IDs + - MEDIUM: fd/poller: turn running_mask to group-local IDs + - MINOR: fd: make fd_clr_running() return the previous value instead + - MEDIUM: fd: make thread_mask now represent group-local IDs + - MEDIUM: fd: make fd_insert() take local thread masks + - MEDIUM: fd: make fd_insert/fd_delete atomically update fd.tgid + - MEDIUM: fd: quit fd_update_events() when FD is closed + - MEDIUM: thread: change thread_resolve_group_mask() to return group-local values + - MEDIUM: listener: switch bind_thread from global to group-local + - MINOR: fd: add fd_reregister_all() to deal with boot-time FDs + - MEDIUM: fd: support stopping FDs during starting + - MAJOR: pollers: rely on fd_reregister_all() at boot time + - MAJOR: poller: only touch/inspect the update_mask under tgid protection + - MEDIUM: fd: support broadcasting updates for foreign groups in updt_fd_polling + - CLEANUP: threads: remove the now unused all_threads_mask and tid_bit + - MINOR: config: change default MAX_TGROUPS to 16 + - BUG/MEDIUM: tools: avoid calling dlsym() in static builds + 2022/06/24 : 2.7-dev1 - BUG/MINOR: ssl_ckch: Free error msg if commit changes on a cert entry fails - BUG/MINOR: ssl_ckch: Free error msg if commit changes on a CA/CRL entry fails diff --git a/VERDATE b/VERDATE index 30a7221f40..8a76ea26bd 100644 --- a/VERDATE +++ b/VERDATE @@ -1,2 +1,2 @@ $Format:%ci$ -2022/06/24 +2022/07/16 diff --git a/VERSION b/VERSION index b101fa726c..4b0a8d6fc1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.7-dev1 +2.7-dev2 diff --git a/doc/configuration.txt b/doc/configuration.txt index e8e54a31db..c348a08de3 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -3,7 +3,7 @@ Configuration Manual ---------------------- version 2.7 - 2022/06/24 + 2022/07/16 This document covers the configuration language as implemented in the version