<feed xmlns='http://www.w3.org/2005/Atom'>
<title>firewall4/root/usr/share, branch master</title>
<subtitle>OpenWrt nftables firewall</subtitle>
<id>https://git.openwrt.org/project/firewall4/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/project/firewall4/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/'/>
<updated>2026-11-08T16:27:23Z</updated>
<entry>
<title>fw4: list the software flowtable devices for hardware offloading too</title>
<updated>2026-11-08T16:27:23Z</updated>
<author>
<name>Julius Bairaktaris</name>
</author>
<published>2026-11-08T11:57:14Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=3722eadc088c3ab81389596ca9796112b436583a'/>
<id>urn:sha1:3722eadc088c3ab81389596ca9796112b436583a</id>
<content type='text'>
With flow_offloading_hw, fw4 lists only the devices below the zone
devices. A hardware flowtable is a software flowtable too: the flows the
hardware does not take run through the same ingress hooks. A WireGuard
flow and a container flow then find no hook for their device and stay
on the classic path.

List the same devices for both. A device without hardware offload
support is accepted in a hardware flowtable (pending patch 701), so the
hardware check keeps its meaning.

Signed-off-by: Julius Bairaktaris &lt;julius@bairaktaris.de&gt;
Link: https://github.com/openwrt/firewall4/pull/116
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>fw4: list the layer 3 devices of zones in the software flowtable</title>
<updated>2026-11-08T16:27:23Z</updated>
<author>
<name>Julius Bairaktaris</name>
</author>
<published>2026-11-08T11:55:54Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=b25508586879c84607ca5d47443c291dc8e9442f'/>
<id>urn:sha1:b25508586879c84607ca5d47443c291dc8e9442f</id>
<content type='text'>
fw4 builds the software flowtable from the device each zone network is
set up on. A WireGuard interface has no such device, so its device is
never listed and none of its flows is offloaded. A PPPoE interface
contributes the Ethernet or VLAN device below it, while its pppoe
device is listed only when another interface, such as wan6, names it.

List the layer 3 device of each zone network as well. In QEMU (x86-64
r37896, 6.18.55), a TCP transfer through WireGuard took the forward
chain with 11024 to 45276 packets in 6 s before and with 6 to 7 after,
IPv4 and IPv6, both directions, 3 runs each.

11_flow_offloading_encaps covers the device list for each encapsulation
a zone network can use, from netifd's interface and device status in
that setup: plain, 802.1Q, 802.1ad, PPPoE and PPPoE over VLAN, macvlan,
a VLAN-filtering bridge, a VXLAN and a bond as bridge ports, GRE, IPIP,
SIT, ip6tnl and WireGuard.

Signed-off-by: Julius Bairaktaris &lt;julius@bairaktaris.de&gt;
Link: https://github.com/openwrt/firewall4/pull/116
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>fw4: list the devices a zone names in the software flowtable</title>
<updated>2026-11-08T16:27:23Z</updated>
<author>
<name>Julius Bairaktaris</name>
</author>
<published>2026-10-29T14:27:34Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=55e0d749d041da8a55389879f5f92b0d2e3abd77'/>
<id>urn:sha1:55e0d749d041da8a55389879f5f92b0d2e3abd77</id>
<content type='text'>
A zone can name devices directly, such as dockerd's zone with docker0.
fw4 never puts them into the software flowtable, so since 871df5007eda
a flow from a container is not offloaded at all.

Add the devices of the zone device option for software offloading:
resolve a bridge that netifd does not manage through its sysfs
DEVTYPE, and pass a "name+" wildcard as the prefix "name*", which the
kernel matches against devices that appear later. A flowtable takes a
name prefix since Linux 6.17 (NFTA_DEVICE_PREFIX); before that,
nf_tables_parse_netdev_hooks() refuses it with -EINVAL and the whole
ruleset would fail to load, so a wildcard is left out on older kernels.
Hardware offloading keeps its device list, since a veth or tap device
cannot carry a hardware flow.

Signed-off-by: Julius Bairaktaris &lt;julius@bairaktaris.de&gt;
Link: https://github.com/openwrt/firewall4/pull/116
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>fw4: list lower devices for software flow offloading</title>
<updated>2026-11-08T16:27:23Z</updated>
<author>
<name>Julius Bairaktaris</name>
</author>
<published>2026-11-08T09:54:13Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=a945b12c989f29543250fe29c43a8897e4ec32cb'/>
<id>urn:sha1:a945b12c989f29543250fe29c43a8897e4ec32cb</id>
<content type='text'>
Since Linux commit 871df5007eda ("netfilter: flowtable: bail out if
forward path cannot be discovered"), a flow is offloaded only if the
device at the bottom of its forward path is a flowtable device. Behind
a bridge that is the bridge port, behind a VLAN its lower device. With
software offloading, fw4 lists only the zone devices, so flows through
br-lan or a VLAN WAN stay on the classic path.

Resolve the lower devices for software offloading as for hardware
offloading, including the &lt;member&gt;.sta* prefix of a wireless bridge
member, since a WDS port that appears after the reload is a bridge port
like any other. This undoes e009588 ("fw4: do not add physical devices
for soft offload"), which dropped them because a flow kept transmitting
to a port its host had left; the kernel now tears such a flow down when
the bridge fdb entry moves.

Signed-off-by: Julius Bairaktaris &lt;julius@bairaktaris.de&gt;
Link: https://github.com/openwrt/firewall4/pull/116
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>config: mark unsupported fw3 options correctly</title>
<updated>2026-11-02T23:57:55Z</updated>
<author>
<name>Andris PE</name>
</author>
<published>2025-05-23T17:08:20Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=358d42144b72ff29d39fd2ba52f7fc19fe43dd03'/>
<id>urn:sha1:358d42144b72ff29d39fd2ba52f7fc19fe43dd03</id>
<content type='text'>
- mark sysctl-based fw3 options UNSUPPORTED, emitting warning
- remove notion of unsupported option from default config file

No change in ruleset logic.

Signed-off-by: Andris PE &lt;neandris@gmail.com&gt;
</content>
</entry>
<entry>
<title>Set has_ports for helper rules and require helper port</title>
<updated>2026-11-02T23:49:14Z</updated>
<author>
<name>Jo-Philipp Wich</name>
</author>
<published>2024-11-27T01:03:20Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=a314df48644ec8f894f31141327f5522ad7c87f1'/>
<id>urn:sha1:a314df48644ec8f894f31141327f5522ad7c87f1</id>
<content type='text'>
Helper definitions are used to generate automatic `ct helper set` rules.
A helper without a port cannot produce a meaningful assignment rule, so
make `port` mandatory in `parse_helper()`. The generated helper rule now
also carries `has_ports: true`, which suppresses the redundant `meta
l4proto` match via the normal `has_ports` guard instead of special-casing
`set_helper` in the template. No behavior change for valid helpers.

Suggested-by: Andris PE &lt;neandris@gmail.com&gt;
[require helper port and set has_ports instead of special-casing set_helper]
Signed-off-by: Jo-Philipp Wich &lt;jo@mein.io&gt;
</content>
</entry>
<entry>
<title>templates: remove stray file</title>
<updated>2026-11-02T23:29:26Z</updated>
<author>
<name>Andris PE</name>
</author>
<published>2026-03-10T12:27:48Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=4b686774d2a7b23d86d134cfbd3304d6010d0a5e'/>
<id>urn:sha1:4b686774d2a7b23d86d134cfbd3304d6010d0a5e</id>
<content type='text'>
Fixes: https://github.com/openwrt/firewall4/issues/86
Signed-off-by: Andris PE &lt;neandris@gmail.com&gt;
</content>
</entry>
<entry>
<title>fw4: support multiple ipset references per rule and redirect</title>
<updated>2026-11-02T23:25:34Z</updated>
<author>
<name>Philipp Raschdorff</name>
</author>
<published>2026-10-17T20:01:40Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=7f34d9e0e6786174693d7bc6f9f9da05488ae5ae'/>
<id>urn:sha1:7f34d9e0e6786174693d7bc6f9f9da05488ae5ae</id>
<content type='text'>
The `list ipset` option has AND semantics: all listed references are AND-ed into one nft rule.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Signed-off-by: Philipp Raschdorff &lt;p.raschdorff@googlemail.com&gt;
[shorten comment]
Signed-off-by: Jo-Philipp Wich &lt;jo@mein.io&gt;
</content>
</entry>
<entry>
<title>fw4: reject unknown tokens in ipset references</title>
<updated>2026-11-02T23:15:59Z</updated>
<author>
<name>Philipp Raschdorff</name>
</author>
<published>2026-10-17T20:01:42Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=daf6cf607cab1efbefca5715c9f781979c3664ba'/>
<id>urn:sha1:daf6cf607cab1efbefca5715c9f781979c3664ba</id>
<content type='text'>
parse_setmatch() ignores every token after the set name that is not a
direction (`src`, `dst`, `dest`). `option ipset 'setA setB'` is
therefore accepted as a reference to setA only, and the rule silently
matches fewer conditions than configured. With list support for the
option this mistake becomes likely.

Reject the value if it has more than three tokens or a token that is
not a direction. An invalid value drops the section with the usual
"specifies invalid value" warning (fail-closed).

This is a behaviour change: a configuration that relied on unknown
tokens being ignored loses the affected rule after the update. For an
ACCEPT rule that closes access; for a DROP or REJECT rule it removes
the block, which is the opposite of fail-closed. Both cases are reported
with a warning, but nothing else draws attention to them. If that risk
is considered too high, the alternative is to keep accepting the
reference and only warn about the ignored tokens; this patch is
submitted separately so that it can be discussed and dropped on its
own.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Signed-off-by: Philipp Raschdorff &lt;p.raschdorff@googlemail.com&gt;
</content>
</entry>
<entry>
<title>fw4: add WDS ports to the flowtable by prefix</title>
<updated>2026-11-02T23:15:59Z</updated>
<author>
<name>Koral Ilgun</name>
</author>
<published>2026-10-21T00:18:03Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firewall4/commit/?id=296ddab860a104db08016100c109adda069e4abc'/>
<id>urn:sha1:296ddab860a104db08016100c109adda069e4abc</id>
<content type='text'>
fw4 reads the bridge members from sysfs when it renders the ruleset
and lists each member by name in the hardware offload flowtable.
hostapd creates the port of a 4-address station as &lt;bss&gt;.sta&lt;aid&gt;
when the station associates. A port that comes up after the last
reload under a name that was not in use then joins the bridge, but
not the flowtable, and its upload takes the slow path until the
next reload.

The kernel binds a flowtable hook with a name prefix to each device
that registers later under a matching name, the hardware block
included. So list &lt;member&gt;.sta* for each wireless member and drop
the port names, because the kernel refuses a list that holds a
prefix and a name under it. Each wireless member gets the prefix,
also one without a port at the time of the render, because the
reloads at boot run before the first station associates.

A name prefix in a flowtable needs the NFTA_DEVICE_PREFIX attribute
of Linux 6.17, which nftables 1.1.6 and later send. An older kernel
refuses it, so the check of hardware offload would fail and fw4 would
fall back to software offloading. So fw4 uses the prefix only on
Linux 6.17 and later, and lists the port names as before on an older
kernel. Software offloading lists the zone devices and does not
change.

Signed-off-by: Koral Ilgun &lt;koral.ilgun@adtran.com&gt;
</content>
</entry>
</feed>
