Отвал WAN-порта у роутеров на Mediatek Filogic. eth0: Link is Down
Предположительно косяк где-то в свиче MediaTek MT7531, который установлен во многие роутеры с процессором Mediatek Filogic.
Самое неприятное в этой проблеме то, что она плавающая. Искусственно вызвать у меня её пока не получилось. А ловил я её на Asus TUF-AX4200 и Xiaomi AX3000T. Выглядит это так (вывод logread):
Wed Aug 28 19:01:51 2024 kern.warn kernel: [1203220.362293] ------------[ cut here ]------------
Wed Aug 28 19:01:51 2024 kern.info kernel: [1203220.367094] NETDEV WATCHDOG: eth0 (mtk_soc_eth): transmit queue 0 timed out
Wed Aug 28 19:01:51 2024 kern.warn kernel: [1203220.374239] WARNING: CPU: 1 PID: 0 at 0xffffffc0086c5f74
---
Wed Aug 28 19:01:51 2024 kern.err kernel: [1203220.628022] mtk_soc_eth 15100000.ethernet eth0: transmit timed out
Wed Aug 28 19:01:51 2024 kern.info kernel: [1203220.766604] mtk_soc_eth 15100000.ethernet eth0: Link is Down
Wed Aug 28 19:01:51 2024 kern.err kernel: [1203221.313060] mtk_soc_eth 15100000.ethernet: warm reset failed
Wed Aug 28 19:01:52 2024 kern.info kernel: [1203221.335342] mtk_soc_eth 15100000.ethernet eth0: configuring for fixed/2500base-x link mode
Wed Aug 28 19:01:52 2024 kern.info kernel: [1203221.343972] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 2.5Gbps/Full - flow control rx/tx
---
Wed Aug 28 19:02:03 2024 kern.err kernel: [1203232.359304] mtk_soc_eth 15100000.ethernet eth0: transmit timed out
Wed Aug 28 19:02:03 2024 kern.info kernel: [1203232.497844] mtk_soc_eth 15100000.ethernet eth0: Link is Down
Wed Aug 28 19:02:03 2024 kern.err kernel: [1203233.040148] mtk_soc_eth 15100000.ethernet: warm reset failed
Wed Aug 28 19:02:03 2024 kern.info kernel: [1203233.062522] mtk_soc_eth 15100000.ethernet eth0: configuring for fixed/2500base-x link mode
Wed Aug 28 19:02:03 2024 kern.info kernel: [1203233.071224] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 2.5Gbps/Full - flow control rx/tx
Костылится выключением сегментации TCP на сетевом интерфейсе.
Смотрим, включена ли сегментация:
root@OpenWrt:~# ethtool -k eth0 | grep segment
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: on
tx-tcp-mangleid-segmentation: on
tx-tcp6-segmentation: on
Выключаем командой
ethtool -K eth0 tso off
Но при перезагрузке сегментация снова будет включена, поэтому необходимо воткнуть этот костыль при загрузке роутера.
Пользовательские команды, которые должны быть выполнены при загрузке в OpenWrt, прописываются в файл /etc/rc.local. Вставляем ethtool -K eth0 tso off перед exit 0. Рестартим роутер и проверяем, что сегментация выключена:
root@OpenWrt:~# ethtool -k eth0 | grep segment
tcp-segmentation-offload: off
tx-tcp-segmentation: off
tx-tcp-ecn-segmentation: off
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: off
Надеюсь, это не проблема на стороне железа и в будущем будет пофикшено. Issues по этой теме:
https://github.com/openwrt/openwrt/issues/12143
https://github.com/openwrt/openwrt/issues/13122
https://github.com/openwrt/openwrt/issues/13262
Сталкивались? Помог костыль?
Предположительно косяк где-то в свиче MediaTek MT7531, который установлен во многие роутеры с процессором Mediatek Filogic.
Самое неприятное в этой проблеме то, что она плавающая. Искусственно вызвать у меня её пока не получилось. А ловил я её на Asus TUF-AX4200 и Xiaomi AX3000T. Выглядит это так (вывод logread):
Wed Aug 28 19:01:51 2024 kern.warn kernel: [1203220.362293] ------------[ cut here ]------------
Wed Aug 28 19:01:51 2024 kern.info kernel: [1203220.367094] NETDEV WATCHDOG: eth0 (mtk_soc_eth): transmit queue 0 timed out
Wed Aug 28 19:01:51 2024 kern.warn kernel: [1203220.374239] WARNING: CPU: 1 PID: 0 at 0xffffffc0086c5f74
---
Wed Aug 28 19:01:51 2024 kern.err kernel: [1203220.628022] mtk_soc_eth 15100000.ethernet eth0: transmit timed out
Wed Aug 28 19:01:51 2024 kern.info kernel: [1203220.766604] mtk_soc_eth 15100000.ethernet eth0: Link is Down
Wed Aug 28 19:01:51 2024 kern.err kernel: [1203221.313060] mtk_soc_eth 15100000.ethernet: warm reset failed
Wed Aug 28 19:01:52 2024 kern.info kernel: [1203221.335342] mtk_soc_eth 15100000.ethernet eth0: configuring for fixed/2500base-x link mode
Wed Aug 28 19:01:52 2024 kern.info kernel: [1203221.343972] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 2.5Gbps/Full - flow control rx/tx
---
Wed Aug 28 19:02:03 2024 kern.err kernel: [1203232.359304] mtk_soc_eth 15100000.ethernet eth0: transmit timed out
Wed Aug 28 19:02:03 2024 kern.info kernel: [1203232.497844] mtk_soc_eth 15100000.ethernet eth0: Link is Down
Wed Aug 28 19:02:03 2024 kern.err kernel: [1203233.040148] mtk_soc_eth 15100000.ethernet: warm reset failed
Wed Aug 28 19:02:03 2024 kern.info kernel: [1203233.062522] mtk_soc_eth 15100000.ethernet eth0: configuring for fixed/2500base-x link mode
Wed Aug 28 19:02:03 2024 kern.info kernel: [1203233.071224] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 2.5Gbps/Full - flow control rx/tx
Костылится выключением сегментации TCP на сетевом интерфейсе.
Смотрим, включена ли сегментация:
root@OpenWrt:~# ethtool -k eth0 | grep segment
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: on
tx-tcp-mangleid-segmentation: on
tx-tcp6-segmentation: on
Выключаем командой
ethtool -K eth0 tso off
Но при перезагрузке сегментация снова будет включена, поэтому необходимо воткнуть этот костыль при загрузке роутера.
Пользовательские команды, которые должны быть выполнены при загрузке в OpenWrt, прописываются в файл /etc/rc.local. Вставляем ethtool -K eth0 tso off перед exit 0. Рестартим роутер и проверяем, что сегментация выключена:
root@OpenWrt:~# ethtool -k eth0 | grep segment
tcp-segmentation-offload: off
tx-tcp-segmentation: off
tx-tcp-ecn-segmentation: off
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: off
Надеюсь, это не проблема на стороне железа и в будущем будет пофикшено. Issues по этой теме:
https://github.com/openwrt/openwrt/issues/12143
https://github.com/openwrt/openwrt/issues/13122
https://github.com/openwrt/openwrt/issues/13262
Сталкивались? Помог костыль?