48cb44cb3e
FilterTable::evaluate() set final_verdict for matched rules but never returned it — always returned the chain's default_policy instead. This meant every firewall rule (ACCEPT/DROP/REJECT/LOG) was being evaluated (correctly) but its verdict was DISCARDED. Symptoms: - 'DROP' rules had no effect — packets flowed through - 'ACCEPT' rules had no effect — packets flowed through - Only default_policy was ever applied Fix: return final_verdict.unwrap_or(default_policy). Now 'iptables-style' rules actually take effect: - DROP rules block traffic - ACCEPT rules allow traffic (before default) - REJECT rules send ICMP unreachable - LOG rules log and continue This bug was introduced when the filter evaluation logic was refactored and the return statement was left pointing at the default policy instead of the verdict from the rule loop. Confirmed via cargo build; warning 'value assigned to final_verdict is never read' is now gone.