Страницы

понедельник, 1 января 2024 г.

Остановка процесса Niklaus Wirth

1 января 2024 года остановились базовые биологические процессы создателя семейства типизированных языков программирования Pascal, Modula, Oberon - профессора высшей технической школы Цюриха - Никлауса Вирта.

Niklaus Wirth/  Copyright by ETH

 

Сообщение о событии размещено на сайте Eidgenössische Technische Hochschule Zürich - https://ethz.ch/en/news-and-events/eth-news/news/2024/01/computer-pioneer-niklaus-wirth-has-died.html

 

К сожалению, на сайте высшей технической школы Цюриха перестали сохранять наследие профессора Никлауса Вирта. Удалены страницы относящиеся к его достижениям в области компьютерных наук, списаны в утиль модели его компьютеров.

А среди наследия Никлауса Вирта есть такие вещи как  Oberon system, с его TUI - текстовым пользовательским интерфейсом, объединяющим текст с исполняемыми объектами кода - посильнее Linux консоли.

Oberon system - прекрасная реализация идей профессора Вирта, недооценённых нынешним временем. Компактная однопользовательская операционная система написанная на одном языке высокого уровня Oberon. Язык, система, прикладное ПО - мощная концептуальная штука и всё на одном языке. Открытый исходный код, однако. Прекрасная идейная основа для современных персональных программных окружений, для микрокомпьютерных приложений (Oberon RISC). Небольшой размер кода позволяет охватить всю систему одним человеком и это её главное достоинство. Отличный инструмент любителей всё делать с нуля - то, что нужно подрастающему поколению инженеров.


Аминь.







 



 

 


четверг, 16 ноября 2023 г.

Настройка и использование 4G LTE модема Quectel EC25 на микросервере в режиме MBIM mode

Для подключения микросервера к сети Интернет по протоколу IPv6 можно воспользоваться особенностями подключения сотового провайдера MTS, выдающего клиентскому устройству (модему) динамические глобально доступные IPv6-адреса.

Клиентское устройство - модем Quectel EC25, в форме Mini-PCIe, подключенное через USB-mini-PCIe адаптер Kroks-Cse PCI. При подключении к микросерверу, создаёт символьное устройство /dev/cdc-wdm0 и 4 устройства /dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2, /dev/ttyUSB3.

Выкопировка из вывода команды dmesg: 

[   25.713111] usbcore: registered new interface driver usbserial_generic
[   25.713136] usbserial: USB Serial support registered for generic
[   26.165617] usbcore: registered new interface driver cdc_wdm
[   26.175326] usbcore: registered new interface driver cdc_ether
[   26.184329] usbcore: registered new interface driver qmi_wwan
[   26.189100] usbcore: registered new interface driver cdc_ncm
[   26.225016] cdc_mbim 1-2:1.4: cdc-wdm0: USB WDM device
[   26.225389] cdc_mbim 1-2:1.4 wwan0: register 'cdc_mbim' at usb-0000:00:12.2-2, CDC MBIM, f1:f2:f3:f4:f5:f6
[   26.225540] usbcore: registered new interface driver cdc_mbim
[   26.282997] usbcore: registered new interface driver option
[   26.283023] usbserial: USB Serial support registered for GSM modem (1-port)
[   26.283123] option 1-2:1.0: GSM modem (1-port) converter detected
[   26.284695] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
[   26.284793] option 1-2:1.1: GSM modem (1-port) converter detected
[   26.284924] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
[   26.284987] option 1-2:1.2: GSM modem (1-port) converter detected
[   26.285092] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2
[   26.285151] option 1-2:1.3: GSM modem (1-port) converter detected
[   26.285236] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB3

 

Драйвер (модуль ядра) cdc_mbim поддерживает USB устройства соответствующие спецификации “Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model”. Модем видимо был ранее сконфигурирован в режиме MBIM.

 

Выкопировка из вывода команды lsusb:

Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem


Также создаётся сетевой интерфейс с именем wwan0, не сконфигурированный.

Выкопировка из вывода команды ip addr:

3: wwan0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000

Как пишется в ряде руководств - дальнейшее конфигурирование выполняется с помощью программ пользовательского окружения mbimcli, mbim-network.

Для их установки в систему микросервера, а это в моменте - Ubuntu 22.04 LTS на ядре linux 5.15.0-88-generic, выполняется установка следующего пакета - libmbim-utils.

apt-get install libmbim-utils


Конфигурирование настроек провайдера

Для команды mbim-network нужно создать и заполнить файл /etc/mbim-network.conf. В данном случае, для сотового провайдера MTS.

root@microserver:/# cat /etc/mbim-network.conf
APN=internet.mts.ru
APN_USER=mts
APN_PASS=mts
APN_AUTH=mschapv2
PROXY=yes


PROXY - чем-то важен, без него модем странно реагирует на команды.


Проверка первого подключения

Для начала, выполнив команду mbimcli --help-all, показывающую все доступные опции, можно растеряться, т.к. непонятно, в какой последовательности их надо выполнять. Эту головную боль снимает скрипт-команда mbim-network.

Для начала посмотрим что выдаёт команда --query-device-caps

--query-device-caps. Опция -p важна! (--device-open-proxy).

root@microserver:/home/macibuki# mbimcli --device /dev/cdc-wdm0 --device-open-proxy --query-device-caps

или

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-device-caps
[/dev/cdc-wdm0] Device capabilities retrieved:
          Device type: 'remote'
       Cellular class: 'gsm'
          Voice class: 'no-voice'
            SIM class: 'removable'
           Data class: 'gprs, edge, umts, hsdpa, hsupa, lte'
             SMS caps: 'pdu-receive, pdu-send'
            Ctrl caps: 'reg-manual'
         Max sessions: '8'
    Custom data class: 'unknown'
            Device ID: '0000'
        Firmware info: 'EC25ECGAR06A09M1G'
        Hardware info: 'QUECTEL Mobile Broadband Modul'

 

Device ID - содержит чувствительную информацию и не приводится.

Что выдаёт команда --query-subscriber-ready-status.

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-subscriber-ready-status
[/dev/cdc-wdm0] Subscriber ready status retrieved:
          Ready state: 'initialized'
        Subscriber ID: '000000000000000'
            SIM ICCID: '00000000000000000000'
           Ready info: 'none'
    Telephone numbers: (1) '+79100000000'


Вывод команды содержит чувствительную информацию по SIM-карте, абоненту, номеру телефона.


Важная проверка состояния радио, перед запуском mbim-network - команда --query-radio-state

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-radio-state
[/dev/cdc-wdm0] Radio state retrieved:
         Hardware radio state: 'on'
         Software radio state: 'off'


Так и есть, обычно "Software radio state: Off" и тогда надо включить радио командой --set-radio-state=on

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --set-radio-state=on
[/dev/cdc-wdm0] Radio state retrieved:
         Hardware radio state: 'on'
         Software radio state: 'on'


Проверка состояния PIN-кода:

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p   --query-pin-state
[/dev/cdc-wdm0] PIN info:
             PIN state: 'unlocked'

Если PIN-код в состоянии 'locked', то его можно ввести командой --enter-pin, отключить ввод PIN-кода командой --disable-pin (придётся ввести один раз).


Также можно посмотреть выводы команды --query-registration-state (состояние регистрации), --query-signal-state (состояние сигнала).

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-registration-state
[/dev/cdc-wdm0] Registration status:
             Network error: 'none'
            Register state: 'home'
             Register mode: 'automatic'
    Available data classes: 'lte'
    Current cellular class: 'gsm'
               Provider ID: '25001'
             Provider name: 'MTS RUS'
              Roaming text: 'unknown'
        Registration flags: 'packet-service-automatic-attach'
root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-visible-providers
error: operation failed: Busy
root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-signal-state
[/dev/cdc-wdm0] Signal state:
              RSSI [0-31,99]: '11'
         Error rate [0-7,99]: '99'
    Signal strength interval: '5'
              RSSI threshold: '2'
        Error rate threshold: 'unspecified'
root@microserver:/#


Можно посмотреть состояние соединения (приведёно рабочее состояние):

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p  --query-connection-state
[/dev/cdc-wdm0] Connection status:
          Session ID: '0'
    Activation state: 'activated'
    Voice call state: 'none'
             IP type: 'ipv4v6'
        Context type: 'internet'
       Network error: 'none'

(не рабочее состояние):

[/dev/cdc-wdm0] Connection status:
          Session ID: '0'
    Activation state: 'deactivated'
    Voice call state: 'none'
             IP type: 'default'
        Context type: 'none'
       Network error: 'none'


Итак, пришло время запустить соединение командой mbim-network, если выводы команд ориентировочно похожи  на примеры в этой статье.

mbim-network /dev/cdc-wdm0 start

...

Если устройство определилось в системе, если включено радио, то по идее должно работать.

Посмотрим, для начала рабочее состояние, каким оно должно быть:

root@microserver:/# mbim-network /dev/cdc-wdm0 status
Loading profile at /etc/mbim-network.conf...
    APN: internet.mts.ru
    APN auth protocol: mschapv2
    APN user: mts
    APN password: mts
    mbim-proxy: yes
Getting status with 'mbimcli -d /dev/cdc-wdm0 --query-connection-state --device-open-proxy'...
Status: activated

 

Однако, если посмотреть ip addr, то можно продолжить смотреть на не настроенный интерфейс wwan0.

Присвоение IP-адресов сетевому интерфейсу wwan0

Важная особенность состоит в том, что даже получив работающее (activated) состояние на предыдущем этапе, надо получить у провайдера ip-адреса и настроить интерфейс wwan0 вручную или с помощью какого-либо скрипта.

Для соединений такого типа (mbim) не работает стандартный клиент dhcp - dhclient и ip-адреса получаются специфической командой --query-ip-configuration, которая выводит их просто в консоль, в текстовом виде, после чего их можно использовать для ручного конфигурирования командой ip.

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration

[/dev/cdc-wdm0] IPv4 configuration available: 'address, gateway, dns, mtu'
     IP [0]: '10.191.000.00/30'
    Gateway: '10.191.000.01'
    DNS [0]: '213.87.142.84'
    DNS [1]: '213.87.142.85'
        MTU: '1500'

[/dev/cdc-wdm0] IPv6 configuration available: 'address, gateway, dns, mtu'
     IP [0]: '2a00:1fa0:000:0000:0000:0000:0000:0002/64'
    Gateway: '2a00:1fa0:000:000:0000:000:0000:0001'
    DNS [0]: '2a00:1fa0:3e00::1'
    DNS [1]: '2a00:1fa0:7e00::1'
        MTU: '1500'

Странно то, что при каждом запросе --query-ip-configuration возвращает новые адреса, особенно ipv6. Это не позволяет проверить текущую ip конфигурацию модема, что может привести и приводит к неработоспособности сети. Т.е. нельзя после установки соединения выполнять команду  --query-ip-configuration, т.к. модем будет иметь одну настройку ip, а интерфейс wwan0 другую, отличающуюся, старую.

Присвоение IPv4-адреса

Обычно, скрипт делает очистку адресов на конфигурируемом интерфейсе, перед новым присвоением.

root@microserver:/# ip addr flush dev wwan0

Взяв в строке IP [0]: адрес  с маской, выполним команду ip addr add ... и присвоим полученный ipv4-адрес интерфейсу wwan0.

root@microserver:/# ip addr add 10.191.000.02/30 dev wwan0 broadcast +


Присвоение IPv6-адреса

root@microserver:/# ip addr add 2a00:1fa0:000:0000:0000:0000:0000:0002/64 dev wwan0



Настройка маршрута по-умолчанию через шлюз (gateway), для сетевого интерфейса wwan0

Так как микросервер уже имеет маршрут по-умолчанию настроенный через сетевой интерфейс enp2s0, то надо удалить старый маршрут по-умолчанию (default) и добавить новый, но уже через сетевой интерфейс wwan0.

Вывод команды ip route до настройки нового маршрута:

root@microserver:/# ip route
default via 192.168.88.1 dev enp2s0
default via 192.168.88.1 dev enp2s0 proto dhcp src 192.168.88.3 metric 1024
192.168.88.0/24 dev enp2s0 proto kernel scope link src 192.168.88.3 metric 1024
192.168.88.1 dev enp2s0 proto dhcp scope link src 192.168.88.3 metric 1024

Удаление старого маршрута (можно удалить 2 раза):

root@microserver:/# ip route del default via 192.168.88.1 dev enp2s0


Добавление нового маршрута по-умолчанию:

root@microserver:/# ip route add default via 10.191.000.01 dev wwan0

 

root@microserver:/# ip route
default via 10.191.000.01 dev wwan0
10.191.000.02/30 dev wwan0 proto kernel scope link src 10.191.000.02
192.168.88.0/24 dev enp2s0 proto kernel scope link src 192.168.88.3 metric 1024
192.168.88.1 dev enp2s0 proto dhcp scope link src 192.168.88.3 metric 1024 

 

Настройка разрешения доменных имён с помощью команды resolvectl

Кое-что забыли, а именно добавить к интерфейсу wwan0 адреса DNS-серверов провайдера или иных публично открытых DNS-серверов.

Делается это с помощью команды resolvectl, которая входит в systemd-resolved.

Первоначальный запуск resolvectl показывает, что определение имён привязано к интерфейсу  enp2s0, а для wwan0 не настроено.

root@microserver:/# resolvectl status
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: foreign
      DNS Domain: home

Link 2 (enp2s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.88.1
       DNS Servers: 192.168.88.1
        DNS Domain: home

Link 3 (wwan0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Добавим адрес DNS-сервера провайдера к интерфейс wwan0:

root@microserver:/# resolvectl dns wwan0 213.87.142.84

Что изменилось?

root@microserver:/# resolvectl status wwan0
Link 3 (wwan0)
Current Scopes: DNS
     Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
   DNS Servers: 213.87.142.84

 

Запросы на разрешение имён продолжают идти через интерфейс  enp2s0, т.к. он тоже помечен как +DefaultRoute.

root@microserver:/# resolvectl query google.com
google.com: 2a00:1450:4010:c02::8a             -- link: enp2s0
            2a00:1450:4010:c02::8b             -- link: enp2s0
            2a00:1450:4010:c02::64             -- link: enp2s0
            2a00:1450:4010:c02::66             -- link: enp2s0
            74.125.205.139                     -- link: enp2s0
            74.125.205.113                     -- link: enp2s0
            74.125.205.101                     -- link: enp2s0
            74.125.205.100                     -- link: enp2s0
            74.125.205.138                     -- link: enp2s0
            74.125.205.102                     -- link: enp2s0

-- Information acquired via protocol DNS in 26.2ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

Отключаем у интерфейса enp2s0 опцию default-route (относящуюся именно к запросам DNS по-умолчанию).


root@microserver:/# resolvectl default-route enp2s0 no

Что изменилось?


root@microserver:/# resolvectl query google.com
google.com: 2a00:1450:4010:c02::8b             -- link: wwan0
            2a00:1450:4010:c02::66             -- link: wwan0
            2a00:1450:4010:c02::64             -- link: wwan0
            2a00:1450:4010:c02::8a             -- link: wwan0
            108.177.14.139                     -- link: wwan0
            108.177.14.101                     -- link: wwan0
            108.177.14.102                     -- link: wwan0
            108.177.14.138                     -- link: wwan0
            108.177.14.113                     -- link: wwan0
            108.177.14.100                     -- link: wwan0

-- Information acquired via protocol DNS in 173.8ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

Запросы на разрешение имён стали просачиватся через интерфейс  wwan0.

Если повторно запросить разрешение имени google.com, то запрос возвратит ответ из dns-cache, об этом скажет строка "Data from: cache".  Кэш отключается опцией --cache=no.

Кэш всех dns-записей очищается командой - resolvectl flush-caches.

Есть полезная команда revert, чтобы восстановить настройки интерфейса enp2s0 (встроенная сетевая карта ethernet), после всех внесённых изменений скрипта или пользователя.

root@microserver:/# resolvectl revert enp2s0


Автоматизация настройки с помощью модифицированного скрипта mbim-set-ip

Скрипт mbim-set-ip содержит настройку dns с помощью команды systemd-resolve, которая не присутствует в поставке Ubuntu 22.04 LTS, поэтому настройка заменена на resolvectl, который присуствует как в Ubuntu 22.04 LTS так и Fedora 39.

Скрипт скачан с репозитория: https://github.com/elementzonline/GSMModem/tree/master/SIM7600/mbim-set-ip

Закоментировать (#) строки с systemd-resolve в скрипте mbim-set-ip:

# printf "systemd-resolve -4 --interface=$DEV --set-dns=%s\n" "${ipv4_dns[@]}" >>$execfile

и заменить их на resolvectl:

printf "resolvectl dns $DEV %s\n" "${ipv4_dns[@]}" >>$execfile

И для ipv6:

# printf "systemd-resolve -6 --interface=$DEV --set-dns=%s\n" "${ipv6_dns[@]}" >>$execfile

printf "resolvectl dns $DEV %s\n" "${ipv6_dns[@]}" >>$execfile

Скрипт mbim-set-ip не делает за администратора работу по настройки сетевого окружения при наличии нескольких интерфейсов. Идея заложенная в скрипт mbim-set-ip предполагает, что LTE-модем является единственным выходом в Интернет.

В приципе, для своих целей и своего микросервера, скрипт mbim-set-ip можно упростить.

Автоматизация подключения с помощью собственного скрипта systemd

Цель - получить управление модемным подключением посредством systemd, т.к. на микросервере только консольный текстовый режим.

Интерфейс пользователя (администратора) будет содержать несколько стандартных команд (enable, start, status, stop, restart, disable).

systemctl enable modem4.service

systemctl start modem4.service

systemctl status modem4.service

systemctl stop modem4.service

systemctl restart modem4.service

systemctl disable modem4.service

enable, disable - включает подключение таким образом, что при нормальной загрузке устанавливается подключение к IPv6-сети.

start,stop - позволяет управлять состоянием подключения, при наличии ещё одного подключения к микросерверу.

status -  отображает состояние подключения, в том числе ip-адреса и прочее.

Согласно Filesystem Hierarchy Standard (FHS), администратор может расположить свои собственные скрипты (modem4.sh) и команды как в домашней директории, так и в общей системе, например /opt, настройки в /etc/opt и т.п.

Файл описания сервиса modem4.service разумно расположить в /etc/systemd/system

При выполнении команды enable - скрипт modem4 должен проверить наличие установленных утилит mbimcli и библиотек, проверить наличие в системе модема, по его PID-VID, возможно по серийному номеру, наличие символьного устройства (/dev/cdc-wdm0) и т.п.

Проверка наличия установленной поддержки MBIM:

root@microserver:/# apt list libmbim*
Вывод списка… Готово
libmbim-glib-dev/jammy-updates 1.28.0-1~ubuntu20.04.1 amd64
libmbim-glib-dev/jammy-updates 1.28.0-1~ubuntu20.04.1 i386
libmbim-glib-doc/jammy-updates,jammy-updates 1.28.0-1~ubuntu20.04.1 all
libmbim-glib4/jammy-updates,now 1.28.0-1~ubuntu20.04.1 amd64 [установлен, автоматически]
libmbim-glib4/jammy-updates 1.28.0-1~ubuntu20.04.1 i386
libmbim-proxy/jammy-updates,now 1.28.0-1~ubuntu20.04.1 amd64 [установлен, автоматически]
libmbim-proxy/jammy-updates 1.28.0-1~ubuntu20.04.1 i386
libmbim-utils/jammy-updates,now 1.28.0-1~ubuntu20.04.1 amd64 [установлен]
libmbim-utils/jammy-updates 1.28.0-1~ubuntu20.04.1 i386

 

Проверка наличия установленной поддержки QMI (Qualcomm MSM Interface):

root@microserver:/# apt-cache search libqmi
libqmi-glib5 - библиотека работы с протоколом Qualcomm MSM Interface (QMI)
libqmi-proxy - прокси для работы с QMI-портами
gir1.2-qmi-1.0 - GObject introspection data for libqmi-glib
libqmi-glib-dev - Header files for adding QMI support to applications that use glib
libqmi-glib-doc - API documentation for libqmi-glib
libqmi-utils - Utilities to use the QMI protocol from the command line

 

root@microserver:/# apt list libqmi*
Вывод списка… Готово
libqmi-glib-dev/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-glib-dev/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386
libqmi-glib-doc/jammy-updates,jammy-updates 1.32.0-1ubuntu0.22.04.1 all
libqmi-glib5/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-glib5/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386
libqmi-proxy/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-proxy/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386
libqmi-utils/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-utils/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386


Проверка наличия подключения модема конкретного типа, такого как Quectel EC25:

root@microserver:/# lsusb | grep "ID 2c7c:0125"
Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem

root@microserver:/# lsusb -d 2c7c:0125
Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem

root@microserver:/# echo $?

lsusb -d 2c7c:0125 возвращает 0 при наличии устройства с VID=2c7c и PID = 0125 и 1 при отсутствии указанного устройства.

 

Проверка наличия символьного устройства (/dev/cdc-wdm0) из командной строки:

root@microserver:/# if [ -c "/dev/cdc-wdm0" ]; then echo "True"; else echo "False"; fi

True

Проверка драйвера привязанного к символьному устройству /dev/cdc-wdm0:

cdc_mbim - драйвер (модуль ядра) поддерживающий протокол MBIM (Mobile Broadband Interface Model) для сотового модема.

qmi_wwan - драйвер (модуль ядра) поддерживающий протокол QMI (Qualcomm MSM interface) для сотового модема.

root@microserver:/# basename $(realpath /sys/class/usbmisc/cdc-wdm0/device/driver)
cdc_mbim

В данном случае, MBIM режим сотового модема.

Также можно подключиться в специальный порт /dev/ttyUSB2 предназначенный для AT-команд и запросить текущую конфигурацию протокола. Подразумевается, что в системе нет других устройств, захвативших /dev/ttyUSB2 и этот порт привязан к модему. Потребуется команда minicom (apt-get install minicom).

root@microserver:/# minicom -D /dev/ttyUSB2

AT
OK
AT+QCFG="usbnet"
+QCFG: "usbnet",2

OK

+QCFG: "usbnet",2 - подразумевает, что используется MBIM протокол.

+QCFG: "usbnet",1 - подразумевает, что используется ECM протокол.

+QCFG: "usbnet",0 - подразумевает, что используется QMI протокол.


Сам сервисный файл modem4.service (его надо создать в папке /etc/systemd/system) достаточно прост - всю работу делают скрипты startmodem4.sh и stopmodem4.sh

 

root@microserver:/etc/systemd/system# cat modem4.service
[Unit]
Description=LTE Module preparation and configuration
Documentation=man:microserver
After=network.target
Before=network-online.target

[Service]
Type=oneshot
ExecStart=/home/gimmor/startmodem4.sh
ExecStop=/home/gimmor/stopmodem4.sh
RemainAfterExit=yes
 

[Install]
WantedBy=network.target

Из особенностей, для того чтобы наблюдать красивый зелёный сигнал при выводе systemctl status modem4, используется опция RemainAfterExit=yes
 
startmodem4.sh - что-то такое, как например:
 
root@microserver:/home/gimmor# cat startmodem4.sh
#!/bin/bash
# сервер: microserver.local
# 16 ноября 2023 года
# startmodem4.sh - скрипт для настройки LTE модема с помощью systemd

modemdevice="/dev/cdc-wdm0"

if [ -c $modemdevice ]; then echo "Found character device..."; else echo "Not found character device..."; exit 19; fi


driver=$(realpath /sys/class/usbmisc/cdc-wdm0/device/driver)
drivertype=$(basename $driver)
if [ $drivertype == "cdc_mbim" ]; then echo "Found MBIM driver..."; else echo "Unknown driver: $drivertype"; exit 38; fi
if [ $drivertype == "qmi_wwan" ]; then echo "Found QMI driver..."; echo "QMI protocol not supported"; exit 93; fi

# check SIM card PIN state
mbimcli -d /dev/cdc-wdm0 --device-open-proxy --query-pin-state | grep "unlocked"
if [ $? == 0 ]; then echo "PIN code unlocked and no need to enter one" else echo "PIN locked and need to be provided. Aborting..."; exit 1; fi

# check PID&VID - можно пропустить такую проверку
lsusb -d 2c7c:0125
if [ $? == 0 ]; then echo "Found EC25 LTE modem..."; else echo "No modem..."; exit 19; fi

mbimcli -d /dev/cdc-wdm0 -p --set-radio-state=on
echo "LTE modem radio is on"
mbim-network /dev/cdc-wdm0 start
echo "Setting ip configuration ..."
/home/gimmor/mbim-set-ip /dev/cdc-wdm0 wwan0

# Configure DNS resover
resolvectl default-route enp2s0 no
resolvectl default-route wwan0 yes
echo "DNS resolver configured."
echo "LTE modem configured."

stopmodem4.sh - скрипт для остановки подключения через LTE модем.

root@microserver:/home/gimmor# cat stopmodem4.sh
#!/bin/bash

echo "Stopping LTE modem..."
mbim-network /dev/cdc-wdm0 stop
echo "Disabling radio modem off..."
mbimcli -d /dev/cdc-wdm0 -p --set-radio-state=off

ip addr flush dev wwan0
resolvectl revert wwan0
echo "LTE modem stopped"

 

Для удобства последующего использования, можно настроить (по-аналогии) подключение своего телефона к микросерверу, для последующего оперативного выхода в сеть Интернет, простым подключением в usb-порт.