Показать сообщение отдельно
Старый 20.10.2009, 10:28   #6
Admin
Администратор
 
Аватар для Admin
 
Регистрация: 16.04.2007
Ресивер: .....
Адрес: Зимбабве
Сообщений: 3,167
Сказал(а) спасибо: 2,176
Поблагодарили 9,291 раз(а) в 2,273 сообщениях
Вес репутации: 56
Admin отключил(а) отображение уровня репутации
По умолчанию Общие положения о натройке 3-G модемов. Часть 2

В данном посте будут рассматриваться вопросы составления скриптов дозвона и формирования скриптов автозапуска (для автоматического запуска подключения к Интернету по факту включения роутера)

Итак, мы добились перевода модема в режим модема, с открытием СОМ-портов. Теперь можно приступать к сборке скриптов дозвона.
============================================ ==================
IV. Пишем скрипты дозвона
============================================ ==================
Отмечу, что в большинстве источников предлагается начинать настройку подключения именно с написания данных скриптов, однако, на мой взгляд, более адекватным будет писать данные скрипты после того, как мы добились правильной инициализации модема в системе, т.к. только при условии открытия СОМ-портов, что дает возможность осуществить дозвон.
Основными скриптами настроек дозвона являются:
1) /tmp/ppp/peers/dialup - скрипт основных параметров связи, включая учетную запись dialup-подключения и параметры СОМ-порта
2) /tmp/ppp/dialup.chat - скрипт собственно дозвона.
Рассмотрим структуру этих скриптов:
--------------------------------------------------------------------------------
/tmp/ppp/peers/dialup:
Код:
debug
/dev/usb/tts/0
921600
mtu 1400
mru 1400
crtscts
noipdefault
ipcp-accept-local
lcp-echo-interval 30
lcp-echo-failure 5
usepeerdns
noauth
nodetach
persist
user 'Dialup_Login'
password 'Dialup_Password'
connect "/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2>/tmp/chat.log"


--------------------------------------------------------------------------------
Где:
/dev/usb/tts/0 - номер USB-COM порта. Для большинства модемов он первый (0), однако могут быть и исключения, в зависимости от модели модема
921600 - скорость USB-COM порта. Может принимать различные значения (115200, 921600, 460800, 230400) - в зависимости от модели модема
mtu 1400 - максимального размера блока (в байтах), который может быть передан на канальном уровне коммуникационного протокола. Хотя, как правило, этому параметру присваивают значение 1492, практика показывает, что лучше его значение принимать с некоторым учетом потерь (1400)
mru 1400 - определяет размер (в байтах) максимального блока, который может быть принят на канальном уровне коммуникационного протокола. По тем же соображениям его желательно несколько уменьшить.
user 'Dialup_Login' - логин аккаунта доступа в Internet. Его значение может быть как общим для всех пользователей провайдера (как у InterTelecom, Life), так и индивидуальным (PeopleNet)
password 'Dialup_Password' - пароль аккаунта доступа в Internet. Его значение может быть как общим для всех пользователей провайдера (как у InterTelecom, Life), так и индивидуальным (PeopleNet)
Примечание: Для некоторых провайдеров (например, MTC), требуется введение еще одного параметра: remotename
Примечание 2: Для более корректного определения параметров СОМ-порта модема рекомендую вначале полностью установить модем на Windows, после чего посмотреть свойства модема через Диспетчер оборудования
--------------------------------------------------------------------------------
/tmp/ppp/dialup.chat
Код:
для CDMA-стандарта
# ----------------------------------------------
'' ''
'' 'ATZ'
'OK' 'ATD Dialup_Number'
'CONNECT' ''
# для GSM-стандарта
# ----------------------------------------------
'' ''
'' 'ATZ'
'' 'AT+CGDCONT=1,"IP","Dialup_Point"'
'OK' 'ATD Dialup_Number'
'CONNECT' ''
--------------------------------------------------------------------------------
Этот скрипт отличается для CDMA и GSM-стандартов связи. В нем используются параметры:
Dialup_Number - номер дозвона. Может быть одинаков для целой группы провайдеров.
Dialup_Point - точка входа в Internet. Нужен только для GSM-стандарта. У каждого провайдера она, как правило, своя.
Возможно также, учитывая информацию по подключению от разных провайдеров, параметр AT+CGDCONT=1 также может быть изменен при подключении через мобильный телефон, однако на практике с DIR-320 этот вопрос проверить пока не было возможности.
Последовательность действий:
  1. Итак, в зависимости от настроек нашего провайдера, формируем в блокноте скрипты /tmp/ppp/peers/dialup и /tmp/ppp/dialup.chat
    --------------------------------------------------------------------------------
  2. Создаем на роутере папку /tmp/ppp/peers
    mkdir /tmp/ppp/peers
    --------------------------------------------------------------------------------
  3. И, используя встроенный текстовый редактор vi, заносим скрипт /tmp/ppp/peers/dialup в роутер.
    --------------------------------------------------------------------------------
  4. Аналогичным образом через встроенный текстовый редактор vi, заносим скрипт /tmp/ppp/dialup.chat
    --------------------------------------------------------------------------------
  5. И сохраняем их как файлы, не забывая, что у нас там уже хранится /etc/usb_modeswitch.conf:
    echo /tmp/ppp/peers/dialup >> /tmp/local/.files
    echo /tmp/ppp/dialup.chat >> /tmp/local/.files

    --------------------------------------------------------------------------------
  6. Флешируем их и ребутим роутер:
    flashfs save && flashfs commit && flashfs enable
    reboot

    --------------------------------------------------------------------------------
  7. После перезагрузки пробуем дозвониться (при включенном отображении системного лога):
    usb_modeswitch
    # Ждем, пока модем переключится из режима диска
    insmod usbserial vendor=0xXXXX product=0xXXXX maxSize=XXXX
    # Ждем, пока появятся USB-COM порты
    pppd call dialup
    # Включаем дозвон; при удачной настройке будет выведен весь лог соединения.
Примечание: Если при попытке дозвона выдается сообщение об ошибке "Terminated of signal 2" - значит, роутер пытается неправильно обратиться к СОМ-порту модема. В этом случае перепроверяйте номера и скорости порта. У модемов разных моделей они могут быть разными*.
---
* Добавлю, что в этом случае не обязательно перенастраивать все с нуля. Достаточно остановить скрипт дозвона (<Ctrl+C>), с помощью редактора vi изменить скрипт /tmp/ppp/peers/dialup, зафлешировать его связкой flashfs save && flashfs commit && flashfs enable без ребута, и снова пытаться позвонить по pppd call dialup.
Если дозвон удался - переходим к написанию скрипта автозапуска.
============================================ ==================
V. Пишем скрипт автозапуска
============================================ ==================
Небольшое отступление. В ПО от Олега реализовано несколько вариантов скриптов, исполняемых в случае тех или иных состояний системы (данная информация взята с форума wl500g.info):
  • /usr/local/sbin/pre-boot - исполняется до основной инициализации, в момент, когда ещё не подгружены никакие модули ядра, но уже развёрнут flashfs и скопирован начальный образ для /etc из /usr/etc.
  • /usr/local/sbin/post-boot - исполняется после того, как устройство закончило загрузку и запустило все сервисы, за исключением связанных с веб-камерой и usb дисками (они запустятся примерно через 10 секунд после этого при "обработке" hot plug событий, когда АСУСовский обработчик до них доберётся)
  • /usr/local/sbin/post-mount - отрабатывает, когда устройство завершает монтирование usb дисков, с тем чтобы Вы могли запустить свои сервисы, которые эти диски используют
  • /usr/local/sbin/pre-shutdown - работает перед перезагрузкой системы
  • /usr/local/sbin/post-firewall - исполняется всякий раз, после того как устройство меняет внутренние правила с помощью команд iptables, с тем, чтобы Вы могли внести свои изменения в firewall"
Использование этих зарезервированных скриптов позволяет выполнять определенную комбинацию команд в зависимости от состояния систем. При использовании этих скриптов отпадает необходимость в сохранении их в списке /tmp/local/.files; для сохранения параметров достаточно дать команду на флеширование flashfs save && flashfs commit && flashfs enable. Естественно, что после написания этх скриптов необходимо задавать атрибуты на возможность выполнения chmod 755 Path.
Отмечу также, что запись содержмого этих скриптов лучше организовывать не с помощью команды echo, как предлагается в большинстве источников, а с использованием Блокнота и возможностей встроенного текстового редактора vi, о котором уже неоднократно упоминалось выше.
В данном случае нас интересует формовка скрипта /usr/local/sbin/post-boot для организации автозапуска коннекта по факту включения роутера в сеть. В его формировании в случае подключения модемов есть ряд особенностей:
1) Необходимо учитывать время задержки системы на обработку заданной нами команды. При этом необходимо учитывать и задержку системы самого роутера, и время обработки команды самого модема.
2) Необходимо учитывать, что использование только стандартной команды sleep X между строк касательно настройки оборудования не дает ожидаемого результата в плане требований к выполнению строгой последовательности команд. Это в основном касается модемов EVDO технологии.
Так, стандартная схема построения скрипта автозапуска:
usb_modeswitch
insmod usbserial ......
pppd call dialup

может отлично работать в случае ручного ввода, но в подавляющем большинстве случаев при формовке данной серии команд в скрипт автозапуска (при любых вариантах задержки по команде sleep) автостарт будет работать некорректно. Причину такой неполадки можно увидеть, читая системные логи непосредственно после старта роутера. Наиболее распространенными ошибками выполнения, насколько я заметил, являются:
1) Выполнение команды usb_modeswitch до инициализации модема в режиме CD-ROM. При этом usb_modeswitch пытается обработать устройство, никак не определенное в системе.
2) Выполнение команды insmod usbserial ... до обработки модема командой usb_modeswitch. При этом драйвер usb пытается обработать модем по параметрам, не соответствующим режиму модема (иными словами, модем еще не готов, он не переведен в состояние модема).
3) Выполнение команды дозвона до открытия COM-портов. Модем в системе еще не раскрыл порты, а ему дали команду соединения.
Насколько я могу судить по поводу решения вопросов относительно таких "проблемных" модемов, именно несоблюдение условий строгой последовательности выполнения команд в большинстве случаев приводит к ошибкам подключения при написании скриптов автозапуска. Так, при первой настройке скрипта автозапуска (после проверки модема на дозвон) и следующем за ним ребуте роутера мы можем получить стабильный коннект. Однако, стоит лишь перезагрузить роутер из сети, как скрипт перестает работать (связь срабатывает после первичной настройки и последующего ребута роутера по причине того, что модем сохраняет свое состояние). В результате этого предлагаются различные варианты скриптов, вплоть до неоднократной перезагрузки роутера до появления корректного дозвона.
Как показала практика, задача решается гораздо проще. Для этого достаточно между строкой задержки системы и следующей строкой обработки непосредственно интересующей нас конфигурации ввести "пустую" команду echo. Удобно, если эту команду закреплять за системным логом. При этом команда echo отрабатывается только в случае завершения предыдущей команды (т.е. мы даем системе правильно выполнить команду на роутере, и - дождаться ответа на нее от модема). К тому же отметки вывода в системный лог дополнительной пользовательской информации позволяет более детально отследить работу нашей конфигурации.
Система постановки скрипта автозапуска в этом случае сводится к следущему:
Структура скрипта автозапуска:
Код:
# Инициализируем Shell в скрипте
#!/bin/sh
# Выводим в системный лог сообщение о старте скрипта автозапуска
echo "LOG of post-boot: Started post-boot script" >> /usr/tmp/syslog.log
# Даем время системе определить модем как диск
sleep 10*
# Выводим в системный лог сообщение о старте и запускаем его
echo "LOG of post-boot: Started usb_modeswitch" >> /usr/tmp/syslog.log
usb_modeswitch
# Даем время системе определить модем как диск
sleep 10*
# После получения ответа от модема выводим в системный лог информацию о старте usbserial
echo "LOG of post-boot: Started insmod usbserial" >> /usr/tmp/syslog.log
# И запускаем драйвер
insmod usbserial vendor=0xXXXX product=0xXXXX maxSize=XXXX
# Даем время модему открыть СОМ-порты
sleep 5
# Выводим в системный лог сообщение о старте программы дозвона
echo "LOG of post-boot: pppd call started" >> /usr/tmp/syslog.log
# Производим дозвон
pppd call dialup
---
* Для некоторых модемов, например Huawey, значение этого параметра может доходить до 20.
---

Составив скрипт автозапуска в Блокноте, заносим его в роутер, предварительно создав папку /tmp/local/sbin:
mkdir /tmp/local/sbin
:w mkdir /tmp/local/sbin/post-boot
:q

задаем ему атрибуты на выполнение
chmod 755 /tmp/local/sbin/post-boot
и флешируем
flashfs save && flashfs commit && flashfs enable
После флеширования проверяем, все ли файлы сохранены по логу работы этой комбинации в самом окне Telnet.
Затем перезагружаем роутер
reboot
и после перезагрузки командной перезагружаем роутер из сети, проверяя работу нашей конфигурации по записям в системном логе.
---
PS: Проверял данную систему на пяти моделях модемов. Никаких програмных ребутов не надо. Несколько увеличено время соединения, но оно происходит в 100% случаев. После командного ребута на EVDO модемах связь теряется (надо перезагружать из сети).
__________________
DM500S, DM800HD, GI S8120 - 4W,5E,13E,36Е,75E (VIP)

Поминутный IPTV!

ThinkPad.com.ua - форум любителей техники ThinkPad
Admin вне форума   Ответить с цитированием
6 пользователя(ей) сказали cпасибо: