Wiren Board — «GPRS IP Включен» всегда «нет»

Здравствуйте!

Контроллер Wiren Board 8.5, wb-rules-system 1.13.5, wb-rules 2.40.0-wb100,

прошивка 202603181358, ядро 6.8.0-wb160. Модем штатный, SIMCom A7602E-H,

соединение wb-gsm-sim1 (PPP).

СИМПТОМ

В виртуальном устройстве `network` контрол «GPRS IP Включен»

(`GPRS IP Connection Enabled`) показывает «нет» всегда, в том числе когда

соединение поднято и работает. Соседние строки при этом говорят обратное:

/devices/network/controls/GPRS IP 217.66.149.20

/devices/network/controls/GPRS IP Online Status 1 (Доступ к интернету: да)

/devices/network/controls/GPRS IP Connection Enabled 0 (Включен: нет)

То есть адрес выдан, пинг через интерфейс проходит, а «Включен» — «нет».

Оператор видит противоречие в трёх соседних строках одной карточки.

ПРИЧИНА (как мы её видим)

В /usr/share/wb-rules-system/rules/network.js признак считается так:

runShellCommand(“ip link show {} | awk ‘{for (i=1; i<=NF; i++) if ($i == \“state\”) print $(i+1)}’”…

dev.network[name + ’ Connection Enabled’] = capturedOutput.trim() === “UP”;

У point-to-point интерфейсов (PPP, туннели) ядро Linux не отслеживает несущую

и всегда сообщает `state UNKNOWN`; признак «интерфейс поднят» у них находится

во флагах. Замер на нашем контроллере при работающем 4G:

ppp0 state=UNKNOWN флаги: POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP

wlan0 state=UP флаги: BROADCAST,MULTICAST,UP,LOWER_UP

eth0 state=DOWN флаги: NO-CARRIER,BROADCAST,MULTICAST,UP

Поэтому для GPRS сравнение с “UP” не может дать «да» ни при каких условиях, а

для Ethernet и Wi-Fi та же строка работает правильно.

КАК ПОВТОРИТЬ

1. Поднять соединение wb-gsm-sim1 и убедиться, что интернет через него ходит:

ip -br a show ppp0

ping -I ppp0 -c1 8.8.8.8

2. Посмотреть контролы:

mosquitto_sub -h 127.0.0.1 -t ‘/devices/network/controls/GPRS IP#’ -v

ОЖИДАЕТСЯ: «GPRS IP Включен» = да, раз интерфейс поднят.

ФАКТИЧЕСКИ: «нет» при живом соединении.

ВОЗМОЖНОЕ ИСПРАВЛЕНИЕ

Достаточно считать интерфейс поднятым и при `state UNKNOWN` — либо, что

надёжнее, смотреть флаги (`ip link show | grep -q ‘<.*\bUP\b.*>’`) или

`ip -o link show up`, тогда логика будет одинаковой для всех типов интерфейсов.

У себя мы временно правим строку до вашего исправления: принимаем ещё и

“UNKNOWN”. На Ethernet и Wi-Fi поведение при этом не меняется.

Добрый день.
Благодарю, хорошее описание.
Сейчас воспроизведу и оформлю для разработчиков.

Пока именно “полноценно” проверить не выходит - “белые списки”
image
image
Но да, подтверждается.
Для state UNCNOWN так и есть

12: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp 
    inet 100.108.16.178 peer 10.64.64.64/32 scope global ppp0
       valid_lft forever preferred_lft forever
    inet 100.108.16.178/32 scope global noprefixroute ppp0
       valid_lft forever preferred_lft forever

Воспроизвел, описал разработчикам.

спасибо

Добрый день. Исправление уже доступно в testing.