- new per-policy `domain_file` list: domain patterns from a file, one
per line, for community-maintained lists too large for UCI. Entries
are learned by snoop only, never polled
- a bare name lives under /tmp/shunt (tmpfs, no flash wear), an
absolute path is taken as given; a missing file is an issue, not a
fatal error, the policy stays rendered with empty sets
- new `shunt refresh` (ubus method `refresh`): re-reads the files and
swaps the matcher in place, no restart, learned addresses stay
- matcher: regex fast path, 4x faster on 100k patterns
- routes and rules are written over rtnetlink via ucode-mod-rtnl
instead of one `ip` process per command; route.uc renders the
netlink operations, the new src/rt.uc applies them and reads the
verdict from rtnl.error()
- `rp_filter_manage` writes /proc/sys directly, `nft` is the last
remaining child process
- `+ip` dropped from DEPENDS
- README update
Co-authored-by: Claude <redacted> Signed-off-by: Dirk Brenken <redacted>