< mode edit: moved to move appropriate place >
Hello,
I would like to report what appears to be a routing regression on RouterOS 7.24.2 affecting the CCR2216-1G-12XS-2XQ.
DEVICE
Model: CCR2216-1G-12XS-2XQ
RouterOS: 7.24.2
switch1 configured with l3-hw-offloading=yes
TOPOLOGY (simplified)
The router is a BGP edge router for a small ISP. It has one upstream transit link and several downstream routers reachable over VLAN sub-interfaces on SFP28 ports belonging to switch1. A public /24 is announced upstream, with a blackhole route for that /24 present on the edge router. Individual addresses and small subnets inside that /24 are routed to the downstream routers via static routes.
SYMPTOM
After upgrading to 7.24.2, every static /32 host route pointing to a VLAN interface on switch1 stopped forwarding transit traffic. Static routes with shorter prefixes (/27, /28, /29) over the exact same interfaces, to the exact same gateways, continued working normally.
The failure was silent. BGP stayed up, all PPPoE customers had working Internet access, and the downstream routers were fully operational. Only the individual host addresses used for device management and for a few NAT translations became unreachable from outside the network.
OBSERVED PATTERN
Failed - all showed the H (hardware-offloaded) flag:
six static /32 routes, each egressing through a VLAN interface on switch1
Worked - also showed the H flag, same interfaces, same gateways:
/27, /28 and /29 static routes
Worked - /32 routes that did NOT carry the H flag, because their egress
interface is a standalone ethernet port outside switch1
The pattern was completely consistent. Prefix length alone was not the trigger, and hardware offloading alone was not the trigger. Only the combination of a /32 route and a switch1 egress interface failed.
DIAGNOSTIC EVIDENCE
-
Ping from the router itself to an affected address: success, ~300 microseconds, 0% loss.
-
Ping from the router with src-address forced to the public transit address, so the downstream router had to use its default route to reply: success. This confirmed the downstream router, its addressing and its return path were all correct.
-
Ping to the same address from an external host on another continent: 100% loss.
-
Traceroute from two independent external locations terminated at the upstream provider's final hop, one hop before this router.
-
Ping from the same external host to a different address inside the same announced /24, but routed through an ethernet port outside switch1: success. This ruled out any BGP announcement problem or upstream routing issue.
Points 1 and 3 together indicate that the CPU forwarding path resolves these routes correctly while the hardware path does not. Packets appear to be dropped inside the switch chip before reaching the CPU.
One hypothesis: the /32 entries are not being installed correctly in the offload table, so hardware falls through to the covering /24 blackhole route and discards the traffic. The software routing table shows the /32 routes as active and correct throughout.
WORKAROUND
Setting suppress-hw-offload=yes on each affected route restored reachability immediately and completely:
/ip route set [find dst-address="x.x.x.x/32"] suppress-hw-offload=yes
The H flag disappeared and external reachability returned with 0% packet loss on the first attempt. The same change was applied to all six affected routes with identical results.
This is acceptable for low-volume management traffic, but it is a workaround. Host routes should not require hardware offloading to be disabled.
QUESTIONS
- Is this a known regression in the 7.24 branch, and is a fix planned?
- Is there a release where /32 routes offload correctly on this platform, that we could roll back to if needed?
- Is the issue specific to /32 routes that have a covering blackhole route, or does it affect host routes more generally?
I can supply a supout.rif file and a full configuration export privately if that would help with diagnosis.
Best regards,
Riad Shabani
System Administrator