From: Florian Westphal <fw@strlen.de>
To: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
Cc: netfilter-devel@vger.kernel.org, pablo@netfilter.org
Subject: Re: [PATCH v2 2/7] doc: fix/improve documentation of verdicts
Date: Wed, 15 Oct 2025 13:42:33 +0200 [thread overview]
Message-ID: <aO-IqRLJoEJ1RYTv@strlen.de> (raw)
In-Reply-To: <20251011002928.262644-3-mail@christoph.anton.mitterer.name>
Christoph Anton Mitterer <mail@christoph.anton.mitterer.name> wrote:
> +*accept*:: Terminate the evaluation of the current base chain (and any regular
> +chains called from it) and accept the packet from their point of view.
Suggest:
*accept*:: Terminate the evaluation of the chain. Evaluation
continues in the next base chain, if any.
> +The packet may however still be dropped by either another chain with a higher
> +priority of the same hook or any chain of a later hook.
... This means the packet can still be dropped ...
> +For example, an *accept* in a chain of the *forward* hook still allows one to
> +*drop* (or *reject*, etc.) the packet in another *forward* hook base chain (and
> +any regular chains called from it) that has a higher priority number as well as
> +later in a chain of the *postrouting* hook.
Thanks, that example is good to have.
> +*drop*:: Terminate ruleset evaluation and drop the packet. This occurs
> +instantly, no further chains of any hooks are evaluated and it is thus not
> +possible to again accept the packet in a higher priority or later chain, as
> +those are not evaluated anymore for the packet.
Can this be compacted a bit? I feel this is a tad too verbose.
*drop*: Packet is dropped immediately. No futher evaluation of any kind.
I think thats enough, no?
> +*jump* 'CHAIN':: Store the current position in the call stack of chains and
> + continue evaluation at the first rule of 'CHAIN'.
> + When the end of 'CHAIN' is reached, an implicit *return* verdict is issued.
> + When an absolute verdict is issued (respectively implied by a verdict-like
> + statement) in 'CHAIN', evaluation terminates as described above.
> +*goto* 'CHAIN':: Equal to *jump* except that the current position is not stored
> + in the call stack of chains.
> +*return*:: End evaluation of the current chain, pop the most recently added
> + position from the call stack of chains and continue evaluation after that
> + position.
> + When there’s no position to pop (which is the case when the current chain is
> + either the base chain or a regular chain that was reached solely via *goto*
> + verdicts) end evaluation of the current base chain (and any regular chains
> + called from it) using the base chain’s policy as implicit verdict.
> +*continue*:: Continue ruleset evaluation with the next rule. This
> + is the default behaviour in case a rule issues no verdict.
> *queue*:: Terminate ruleset evaluation and queue the packet to userspace.
> Userspace must provide a drop or accept verdict. In case of accept, processing
> resumes with the next base chain hook, not the rule following the queue verdict.
> +All the above applies analogously to statements that imply a verdict:
> +*redirect*, *dnat*, *snat* and *masquerade* internally issue eventually an
> +*accept* verdict.
You can remove 'eventually'.
> +*reject* and *synproxy* internally issue eventually a *drop* verdict.
Same.
> +These statements thus behave like their implied verdicts, but with side effects.
>
> +For example, a *reject* also immediately terminates the evaluation of the
> +current rule, overrules any *accept* from any other chains
No, not really. There is no *overrule*. We don't keep any 'verdict
state'. There is no difference between 'drop' in the first rule of the
first ever base chain or a drop somewhere later in the pipeline, aside
from side effects from other matching expressions.
I would suggest:
For example, *reject* is like *drop*, but will attempt to send a error
reply packet back to the sender before doing so.
> +overruled, while the various NAT statements may be overruled by other *drop*
> +verdicts respectively statements that imply this.
There is no overrule. I would not mention NAT at all here.
*accept* documentation already says that later chains in the pipeline
can drop the packet (and so could the traffic scheduler, qdisc, NIC,
network ...)
next prev parent reply other threads:[~2025-10-15 11:42 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-25 0:07 nft manpage/wiki issues and improvement ideas Christoph Anton Mitterer
2025-09-25 7:35 ` Pablo Neira Ayuso
2025-09-25 20:37 ` Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 0/7] doc: miscellaneois improvements Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 1/7] doc: clarify evaluation of chains Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 2/7] doc: fix/improve documentation of verdicts Christoph Anton Mitterer
2025-09-30 10:50 ` Florian Westphal
2025-10-02 14:50 ` Christoph Anton Mitterer
2025-10-02 15:21 ` Florian Westphal
2025-10-10 23:06 ` Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 3/7] doc: minor improvements with respect to the term “ruleset” Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 4/7] doc: add overall description of the ruleset evaluation Christoph Anton Mitterer
2025-09-30 11:50 ` Florian Westphal
2025-10-10 23:07 ` Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 5/7] doc: add some more documentation on bitmasks Christoph Anton Mitterer
2025-09-30 11:51 ` Florian Westphal
2025-09-30 11:53 ` Florian Westphal
2025-09-26 1:52 ` [PATCH 6/7] doc: describe include’s collation order to be that of the C locale Christoph Anton Mitterer
2025-09-26 1:52 ` [PATCH 7/7] doc: describe how values match sets Christoph Anton Mitterer
2025-09-26 2:32 ` nft manpage/wiki issues and improvement ideas Christoph Anton Mitterer
2025-10-11 0:23 ` [PATCH v2 0/7] doc: miscellaneous improvements Christoph Anton Mitterer
2025-10-11 0:23 ` [PATCH v2 1/7] doc: clarify evaluation of chains Christoph Anton Mitterer
2025-10-15 11:46 ` Florian Westphal
2025-10-11 0:23 ` [PATCH v2 2/7] doc: fix/improve documentation of verdicts Christoph Anton Mitterer
2025-10-15 11:42 ` Florian Westphal [this message]
2025-10-17 2:30 ` Christoph Anton Mitterer
2025-10-18 13:25 ` Florian Westphal
2025-10-19 0:11 ` Christoph Anton Mitterer
2025-10-11 0:23 ` [PATCH v2 3/7] doc: minor improvements with respect to the term “ruleset” Christoph Anton Mitterer
2025-10-15 11:51 ` Florian Westphal
2025-10-11 0:24 ` [PATCH v2 4/7] doc: add overall description of the ruleset evaluation Christoph Anton Mitterer
2025-10-20 9:39 ` Florian Westphal
2025-10-20 23:48 ` Christoph Anton Mitterer
2025-10-11 0:24 ` [PATCH v2 5/7] doc: add some more documentation on bitmasks Christoph Anton Mitterer
2025-10-18 13:32 ` Florian Westphal
2025-10-19 1:31 ` Christoph Anton Mitterer
2025-10-11 0:24 ` [PATCH v2 6/7] doc: describe include’s collation order to be that of the C locale Christoph Anton Mitterer
2025-10-18 13:35 ` Florian Westphal
2025-10-18 22:13 ` Christoph Anton Mitterer
2025-10-11 0:24 ` [PATCH v2 7/7] doc: describe how values match sets Christoph Anton Mitterer
2025-10-18 13:51 ` Florian Westphal
2025-10-19 1:50 ` Christoph Anton Mitterer
2025-10-19 1:38 ` [PATCH v3 0/6] doc: miscellaneous improvements Christoph Anton Mitterer
2025-10-19 1:38 ` [PATCH v3 1/6] doc: fix/improve documentation of verdicts Christoph Anton Mitterer
2025-10-20 9:28 ` Florian Westphal
2025-10-20 22:13 ` Christoph Anton Mitterer
2025-10-19 1:38 ` [PATCH v3 2/6] doc: minor improvements with respect to the term “ruleset” Christoph Anton Mitterer
2025-10-20 9:04 ` Florian Westphal
2025-10-19 1:38 ` [PATCH v3 3/6] doc: add overall description of the ruleset evaluation Christoph Anton Mitterer
2025-10-19 1:38 ` [PATCH v3 4/6] doc: add more documentation on bitmasks and sets Christoph Anton Mitterer
2025-10-20 9:06 ` Florian Westphal
2025-10-20 21:57 ` Christoph Anton Mitterer
2025-10-20 22:18 ` Florian Westphal
2025-10-20 23:51 ` Christoph Anton Mitterer
2025-10-19 1:38 ` [PATCH v3 5/6] doc: describe include’s collation order to be that of the C locale Christoph Anton Mitterer
2025-10-19 1:38 ` [PATCH v3 6/6] doc: minor improvements the `reject` statement Christoph Anton Mitterer
2025-10-20 23:49 ` [PATCH v4 0/5] doc: miscellaneous improvements Christoph Anton Mitterer
2025-10-20 23:49 ` [PATCH v4 1/5] doc: fix/improve documentation of verdicts Christoph Anton Mitterer
2025-10-20 23:49 ` [PATCH v4 2/5] doc: add overall description of the ruleset evaluation Christoph Anton Mitterer
2025-10-20 23:49 ` [PATCH v4 3/5] doc: add more documentation on bitmasks and sets Christoph Anton Mitterer
2025-10-20 23:49 ` [PATCH v4 4/5] doc: describe include’s collation order to be that of the C locale Christoph Anton Mitterer
2025-10-20 23:49 ` [PATCH v4 5/5] doc: minor improvements the `reject` statement Christoph Anton Mitterer
2025-10-22 14:34 ` Florian Westphal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aO-IqRLJoEJ1RYTv@strlen.de \
--to=fw@strlen.de \
--cc=mail@christoph.anton.mitterer.name \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.