Сделал кое-какой патч по поводу интерфейсов в flow table для hardware offload.
Итак, что мы видим в flow таблицах на ipoe.
nft list flowtable inet fw4 ft
table inet fw4 {
flowtable ft {
hook ingress priority filter
devices = { lan1, lan2, lan3, lan4, phy0-ap0, phy0-ap1, phy1-ap0, phy1-ap1, wan }
flags offload
counter
}
}
nft list flowtable inet zapret ft
table inet zapret {
flowtable ft {
hook ingress priority filter - 1
devices = { lan1, lan2, lan3, lan4, phy0-ap0, phy0-ap1, phy1-ap0, phy1-ap1, wan }
flags offload
}
}
Как видно, они идентичны по интерфейсам.
В случае pppoe fw4 засовывает либо не засовывает pppoe-wan в зависимости от того как задан интерфейс в /etc/config/network
Вариантов может быть 2. Это либо type=pppoe в интерфейсе wan, либо пассивный интерфейс wan (type=static/none) и отдельный интерфейс для pppoe, где device=@wan
В одном случае fw4 сует pppoe-wan , в другом не сует.
zapret сует всегда.
Другая разница в том, что в zapret инициация offload-а происходит только по исходящему трафику. В fw4 - по обоим направлениям.
Хотя новые ядра и принимают в hard offload wifi интерфейсы, они реально не работают на хард оффлоад, но работают на soft offload.
На хард работает только то, что висит на свитче. Проводочки.
Девайс MT7621
Как легко протестировать работает ли оффлоад.
Запускаем спидтест или любую загрузку/выгрузку.
Смотрим как изменяется counter. Если там мало, значит работает.
nft list chain inet zapret flow_offload
table inet zapret {
chain flow_offload {
tcp dport { 80, 443 } ct original packets 1-9 ip daddr != @nozapret return comment "direct flow offloading exemption"
udp dport { 443, 500, 4500 } ct original packets 1-9 ip daddr != @nozapret return comment "direct flow offloading exemption"
meta l4proto { tcp, udp } flow add @ft
meta l4proto { tcp, udp } counter packets 13242 bytes 947561 comment "if offload works here must not be too much traffic"
}
}