Для перемещения по дереву справки используйте строки заголовка.

Справка по NSG Linux 2.1.3
Дерево команд: _common-nodes.ppp.main.chat.script

Что это такое?

Это полностью определённый скрипт дозвона в формате утилиты chat.

Зачем это нужно?

Чтобы откорректировать скрипт вручную в том случае, если автоматически составленный скрипт не подходит по какой-либо причине, или не составляется для данного типа модемов.

Как это настроить?

Скрипт состоит из последовательности строк жду посылаю ... (через пробел). Если скрипт задан пользователем в этом поле, то поля APN и timeout игнорируются.

Перед ожидаемым ответом может ставиться команда TIMEOUT (в верхнем регистре!), которая устанавливает время ожидания этого и последущих ответов (пока оно не будет изменено следующей такой же командой).

В более сложных вариантах вместо одиночного ответа используются цепочки вида ответ-команда1-ответ1-команда2-ответ2-...: если ответ на предыдущую команду не получен за заданный таймаут, то посылается команда2, на которую должен быть получен ответ2; если не получен, то посылается команда3 и т.д; такая цепочка должна всегда завершаться ответом, т.е. содержать нечётное число элементов.

Подробно о скриптах дозвона см. man chat.

ВНИМАНИЕ! Категорически важно соблюдать чётность и порядок следования элементов скрипта дозвона. Скрипт всегда начинается с сообщения, ожидаемого от модема, и завершается командой, посылаемой в модем. Чтобы пропустить очередной элемент, используется элемент из двух одинарных апострофов подряд ('', не путать с двойной кавычкой "), означающий пустую строку.

В NSG Linux скрипт может содержать любые спецсимволы, включая + - " $ и др. (они преобразуются в нужный вид автоматически).

Безусловно, для написания скрипта необходимо знать язык AT-команд конкретного модема, а для начала — хотя бы его тип. К сожалению, язык команд для современных сотовых модемов (да и для заключительного поколения телефонных модемов тоже) изобилует фирменными командами, поэтому полный перечень этих команд выходит за рамки данной справки. Рекомендуется полагаться на команды, которые система подбирает автоматически в зависимости от обнаруженного типа модема. Как правило, бывает достаточно вывести автоматически построенный скрипт командой show, скопировать его в поле script и подставить туда ещё одну пару "команда-ответ" (с обязательным соблюдением чётности). Необходимые команды можно попробовать из числа стандартных (например, AT+CPIN? '+SIM: READY'), или узнать в службе технической поддержки NSG для данного типа модема (тип можно узнать командами ATIn в режиме прозрачного доступа в порт).

Что делать, если это не работает?

Смотреть журнал порта — на какой команде модем даёт сбой, или где нарушается парность "жду-посылаю".


Скрипты для сотовых модемов

Типовой скрипт в NSG Linux формируется, как правило, следующим образом:

  1. Последовательность TIMEOUT 30 XXX-\rAT-OK. Система ждёт от модема строку XXX, которую, естественно, не дождётся. Это старый фидошный трюк, чтобы тупо потянуть время и дать модему прогрузиться (подробнее см. параметр TIMEOUT). После этого посылается Enter (\r), чтобы прочистить буфер порта (мало ли какой мусор мог там остаться после рестарта модема) и команда AT, на которую модем уже должен ответить OK.
  2. Команды инициализации модема — специфические для данного типа. В их число входит также установка выбранного режима в соответствии с параметром mode. Ожидаемый ответ — OK.
  3. Для модемов GSM/UMTS: установка т.н. контента — набора параметров сотового соединения. Единственным существенным из них является APN. Формат этой команды, по счастию, стандартный:
    AT+CGDCONT=1,"IP","access.point.name"[,фигня[,всякая]]
    
    Ответ — OK.
  4. Команда "дозвона". Вообще-то в сотовых сетях это совершенно иная процедура, чем в проводных телефонных, и для неё существует отдельная команда. Но для совместимости со старыми звонилками и старыми мозгами она имеет синоним в формате привычной команды ATD. Для сетей GSM/UMTS это
    ATD*99***1#
    где *99 — фиксированный "вызываемый номер", а ***1 — ссылка на контент номер 1, установленный командой выше. Такое указание в явном виде — надёжнее, это работает во всех без исключения модемах. Ответом должно быть CONNECT.
  5. Поскольку скрипт должен быть завершён посылкой команды, то посылается пустая строка ''.

А теперь сравните это с тем, что вы видите в show.


Примеры скриптов для проводных модемов

Простейший дозвон, модем предполагается всегда готовым к работе:

'' ATDномер CONNECT ''

Более развитый скрипт. Во-первых, обменяться с модемом сообщениями AT OK, чтобы убедиться, что он жив. Во-вторых, программно инициализировать модем (ATZ). В-третьих, поскольку большинство телефонных сетей СССР использует импульсный набор номера (P), то указать это явно в команде ATD:

'' AT OK ATZ OK ATDPномер CONNECT ''

Перебирать два или более вызываемых номера, если первый не отвечает, можно с помощью конструкции:

'' AT OK ATZ OK ATDPномер1 CONNECT-ATDPномер2-CONNECT-ATDPномер3-CONNECT ''

Перезагрузка модема после разъединения, по падению сигнала DTR. Тот же трюк, что и для сотового модема выше, но для проводных модемов обычно достаточно 2–3 сек.

TIMEOUT 3 XXX-\rAT-OK ATDPномер TIMEOUT 45 CONNECT ''

Фрагмент скрипта с аутентификацией в терминальном режиме:

 ... ATDPномер ogin: имя assword: пароль ''

Скрипт для сервера доступа по коммутируемым линиям. Инициализирует модем и ставит его в режим автоответа:

'' ATZ OK ATS0=1 OK ''

То же самое, с задержкой на перезагрузку модема:

TIMEOUT 3 XXX-\rAT-OK ATS0=1 OK ''

Если режим автоответа на модеме по каким-либо причинам использовать нельзя, то можно установить в скрипте неограниченное время ожидания и "ручной" ответ на входящий звонок:

TIMEOUT 3 XXX-\rAT-OK AT TIMEOUT 0 RING ATA TIMEOUT 45 CONNECT ''

Эх, Grand Style...


© Network Systems Group 2015–2024 Отдел документации