Update travel-router/README.md

This commit is contained in:
2026-09-29 14:30:29 +05:00
parent 1b429a8037
commit b29b166c84
+170 -14
View File
@@ -1,26 +1,182 @@
cat > /root/README-no-rrm.txt <<'EOF'
Wi-Fi uplink fix.
# Отключение RRM-сканирования на OpenWrt
Problem:
Upstream AP sends 802.11k/RRM Beacon Measurement Requests.
wpa_supplicant responds by triggering a full 2.4 GHz scan.
On MT7981 this scan lasts ~6.5 seconds and causes packet loss.
## Проблема
Fix:
Add driver_param=no_rrm=1 to wpa_supplicant interface configuration.
На Wi‑Fi uplink периодически возникали провалы связи примерно на 6.5 секунд.
Modified file:
Диагностика показала следующую цепочку:
1. Точка доступа отправляет клиенту 802.11k / RRM Beacon Measurement Request.
2. `wpa_supplicant` получает этот management frame.
3. `wpa_supplicant` запускает полный scan 2.4 GHz через `NL80211_CMD_TRIGGER_SCAN`.
4. Во время scan uplink практически перестаёт передавать пользовательский трафик.
5. В результате появляются потери пакетов и скачки latency.
На MT7981 это проявлялось как:
```text
event 33 -> примерно 6.5 сек -> event 34
```
где `event 33` соответствует запуску scan, а `event 34` — завершению scan.
## Рабочее решение
Для `wpa_supplicant` используется:
```ini
driver_param=no_rrm=1
```
Важно: параметр должен присутствовать **в момент создания STA-интерфейса**. Установка его уже после запуска через control interface проблему не устраняла.
В используемой версии OpenWrt конфигурация STA генерируется через:
```text
/usr/share/ucode/wifi/supplicant.uc
```
Added:
### Изменения
В функции:
```ucode
export function generate(config_list, data, interface)
```
после:
```ucode
interface.config.country = data.config.country_code;
interface.config.beacon_int = data.config.beacon_int;
```
добавлено:
```ucode
interface.config.driver_param = "no_rrm=1";
```
Также строка:
```ucode
append_vars(interface.config, [ 'country', 'beacon_int', 'freq_list' ]);
```
заменена на:
```ucode
append_vars(interface.config, [ 'country', 'beacon_int', 'freq_list', 'driver_param' ]);
```
Итоговый участок:
```ucode
interface.config.country = data.config.country_code;
interface.config.beacon_int = data.config.beacon_int;
interface.config.driver_param = "no_rrm=1";
And added driver_param to:
if (!data.config.scan_list)
data.config.scan_list = wiphy_frequencies(data.phy, data.config.band, data.config.radio);
if (data.config.scan_list)
interface.config.freq_list = join(" ", data.config.scan_list);
append_vars(interface.config, [ 'country', 'beacon_int', 'freq_list', 'driver_param' ]);
```
After OpenWrt/package upgrades verify:
## Применение
После изменения файла:
```bash
wifi down radio0
sleep 2
wifi up radio0
```
Проверить сгенерированный конфиг:
```bash
grep driver_param /var/run/wpa-supplicant-phy0-sta0.conf
```
Expected:
Ожидаемый результат:
```text
driver_param=no_rrm=1
EOF
```
Также можно проверить runtime:
```bash
ubus call wpa_supplicant.phy0-sta0 control '{"command":"GET driver_param"}'
```
Ожидаемый результат:
```json
{
"result": "no_rrm=1"
}
```
## Проверка результата
Для контроля:
```bash
iw event -t
```
и параллельно:
```bash
ping 192.168.0.1
```
После применения `no_rrm=1` проблемные длительные RRM-сканы и связанные с ними потери пакетов исчезли.
## Резервная копия и патч
Перед изменением рекомендуется сохранить оригинал:
```bash
cp /usr/share/ucode/wifi/supplicant.uc /usr/share/ucode/wifi/supplicant.uc.bak
```
Для создания patch нужен пакет:
```bash
apk add diffutils
```
Создать patch:
```bash
diff -u /usr/share/ucode/wifi/supplicant.uc.bak /usr/share/ucode/wifi/supplicant.uc > /root/no-rrm.patch
```
Посмотреть patch:
```bash
cat /root/no-rrm.patch
```
## После обновления OpenWrt
Обновление OpenWrt или пакетов Wi‑Fi может перезаписать:
```text
/usr/share/ucode/wifi/supplicant.uc
```
После обновления проверить:
```bash
grep driver_param /var/run/wpa-supplicant-phy0-sta0.conf
```
Если параметр исчез, повторно применить изменение вручную либо использовать сохранённый patch.
> Примечание: patch, созданный для одной версии `supplicant.uc`, может не примениться автоматически после существенного обновления OpenWrt. В таком случае лучше повторить две небольшие правки вручную.