summaryrefslogtreecommitdiff
path: root/fw/doc/design.md
diff options
context:
space:
mode:
authorCalvin Morrison <calvin@pobox.com>2026-08-18 23:22:58 -0400
committerCalvin Morrison <calvin@pobox.com>2026-08-18 23:22:58 -0400
commit1575b83f102060eab99248c8e7660e9f61df1389 (patch)
tree26901caeddb9c2133925600a255987e8e0aac6d7 /fw/doc/design.md
parent8f5fed654d54a9ae9c4eb95425d857e9524b803c (diff)
doc: fragments cross, callers are checked, and the open list is shorter
man/fw said a fragmented datagram does not cross. IPv4 ones now do: the first piece decides and the train inherits. IPv6 fragments still do not, because the extension header they live in is not walked, and that is what the paragraph says now. The altitude paragraph said request filtering cannot stop an inbound connection before the handshake. Still true, and still worth saying, but it now refuses the connection to the program and hangs it up, which is the difference between a rule that is late and one that does nothing. fwrules(6) gains the other half of that: an in rule naming an ip cannot decide an announce, and decides the connection instead. todo.md loses the six items that are now fixed and gains a third round. One of them is a correction rather than a fix: the interface tables being read into fixed buffers was reported as losing the default route, and it was not -- routes come out sorted and 0.0.0.0 sorts first, so it was always on the first line. Worth removing the limits anyway; not worth having claimed it broke something. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'fw/doc/design.md')
-rw-r--r--fw/doc/design.md5
1 files changed, 3 insertions, 2 deletions
diff --git a/fw/doc/design.md b/fw/doc/design.md
index c45c86b..c14787c 100644
--- a/fw/doc/design.md
+++ b/fw/doc/design.md
@@ -179,7 +179,8 @@ filtering is also just correct design — it is why iptables has separate
## What it cannot do
It filters connections and packets, not flows over time: no rate limits,
-no fragment logic, no ICMP type matching, and IPv6 extension headers are
-not walked. Forwarded traffic is invisible to the namespace mode by
+no rate limits, no ICMP type matching, and IPv6 extension headers are
+not walked — which also means IPv6 fragments do not cross, though IPv4
+ones do, the first piece deciding for the train. Forwarded traffic is invisible to the namespace mode by
construction — it never becomes a ctl write, because no local program
asked for it.