From b8efad09a03dd01a7e95e209ed9efdb7d8354289 Mon Sep 17 00:00:00 2001 From: Eugene Grosbein Date: Mon, 29 Dec 2025 00:05:22 +0700 Subject: [PATCH] ipfw.8: fix documentation bug for setmark A mark set with "setmark" keyword is intended to be "sticky" and documented as such but in fact it is not yet, as current implementation lacks "sticky" feature and its implementation will be not MFC'd, most probably. Correct the manual page until the implementation improved. Discussed with: Boris Lytochkin (author) (cherry picked from commit a7b8a5d37bcb0009297962137bfb6c6570e5af12) (cherry picked from commit 9fdf49e8a501047b61a615ab1b4b133159ad76e1) --- sbin/ipfw/ipfw.8 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sbin/ipfw/ipfw.8 b/sbin/ipfw/ipfw.8 index 9c52ad1513d..e9f05a7dba7 100644 --- a/sbin/ipfw/ipfw.8 +++ b/sbin/ipfw/ipfw.8 @@ -801,8 +801,12 @@ When a packet matches a rule with the .Cm setmark keyword, a 32-bit numeric mark is assigned to the packet. The mark is an extension to the tags. -As tags, mark is "sticky" so the value is kept the same within the kernel and -is lost when the packet leaves the kernel. +The mark is preserved for a packet within a single ipfw ruleset traversal +and is lost when the packet is checked against the active ruleset +next time (see +.Sx PACKET FLOW +section) or leaves ipfw context (e.g. accepted, +diverted, bridged or routed). Unlike tags, mark can be matched as a lookup table key or compared with bitwise mask applied against another value. Each packet can have only one mark, so