Возникла у меня нужда подружить вместе
роутер Asus WL-500g с модемом ZTE AC8700 и чтобы все это работало через people.net.ua (3G EV-DO оператор) ...

Решил описать процесс....



Для начала следует подключить ZTE AC8700 к виндовс машине, настроить и убедиться что все работает.
(и не забудьте оставить гибридный режим, отключить PIN)

Потом следует взять прошивочку от http://koppel.cz/cdmawifi/download/165

Вот соответствие моделей роутеров и индексов названий прошивок:
WL500g Premium -> wl500gp,
WL500g Deluxe -> wl500gx,
WL500g -> wl500g,
WL500b -> 500b или 500bv2, подробнее в тамошнем FAQ.

Утилиту для прошивки - с асуса
http://dlsvr02.asus.com/pub/ASUS/wir...ssian_1382.zip
(http://support.asus.com/download/dow...?model=WL-500g)

Как прошивать - ищите сами, кто не умеет. Не забудьте про сброс в заводские установки...


После прошивки следует зайти в веб-интерфейс модема (admin/admin),
выполнить как минимум Quick Setup
( Internet Connection Type следует выставить как "Cable Modem or other connection type that gets IP automatically." , остальное - как обычно)

И важно настроить диалап режим для нашего уже подключенного модема.
Для этого зайдите в меню "USB Connection (Dial-Up)" - "Connection Mode"
Отметьте "Enable automatic dial on boot"
и выберите "Dial-Up" - "Dial-Up connection via USB modem or
Dial-Up connection via USB-serial converter and modem. "

Потом в следующее подменю "Dial-Up Config" и задайте там параметры коннекта

Username: 8092ххххххх@people.net.ua - ваш логин
Password: Ваш пароль
Dial Number: $777

Кто не имеет пароля - получить его нужно было в виндовс режиме, отправив текстовое сообщение (не важно что в нем) на номер 920.
В ответ вы получите SMS с паролем.

Важно задать "Custom USB device parameters", это аппаратные идентификаторы вашего модема.

USB device Vendor ID (0xabcd): 0x19d2
USB device Product ID (0xefgh): 0xFFFE

И сохраняйте все это дело...


Если у кого другой модем, не ZTE AC8700, получить Vendor ID / Product ID можно с помощью команды lsusb в линукс шеле (или другой программой считывающей аппаратную информацию из USB)



Теперь нужно кое что исправить в настройках прошивки ...
Для этого следует зайти телнетом на модем (admin/admin )
И Выполнить в телнет шеле следующее :

Отключение компрессии РРР

Code:
echo /tmp/ppp/dialup/dialup >>/usr/local/.files 

echo nomppc >/tmp/dialup.tmp
echo nomppe >>/tmp/dialup.tmp
cat /tmp/ppp/dialup/dialup >>/tmp/dialup.tmp
cat /tmp/dialup.tmp > /tmp/ppp/dialup/dialup
Модификация скрипта дозвона

Code:
echo /tmp/ppp/dialup/dialup.chat >> /usr/local/.files 

echo "'' ''" > /tmp/ppp/dialup/dialup.chat
echo "'' 'ATZ'" >> /tmp/ppp/dialup/dialup.chat
echo "'OK' 'ATS7=60'" >> /tmp/ppp/dialup/dialup.chat
echo "'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'" >> /tmp/ppp/dialup/dialup.chat
echo "'OK' 'ATD \$dialno\$'" >> /tmp/ppp/dialup/dialup.chat
echo "'CONNECT' ''" >> /tmp/ppp/dialup/dialup.chat

После этого можно записать изменения в флеш модема

Code:
flashfs save && flashfs commit && flashfs enable


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

Если этого не происходит, проверьте лог файл
(в телнете tail -f /tmp/syslog.log или cat /tmp/syslog.log ).
Или через веб, меню "Status & Log" -> "System Log"




Однко у ZTE AC8700 есть одна неприятная особенность, он при обрыве соединенения может не переконектится.
Нормальные hungup команды вроде +++ модем не понимает,
кроме того, насколько мне известно, драйвер usbserial порта в линуксе нормально не обрабатывает дроп DTR-а...

Все это приводит в следующему эффекту, если роутер посчитает что линк оборвался, он попытается рестартануть pppd (произвести реконект).
Однако модем будет продолжать слать в порт данные ррр сессии.

я долго думал как решить эту проблему и не придумал ничего проще и лучше чем просто перегружать роутер (при этом USB порт сбрасывается и модем соответвенно)

Вы можете не делать то что описано ниже - просто прийдется перегружать роутер вручную при отсутсвии связи.



Ниже приведены действия по включению крона и скипт...
все выполняется в телнет шеле.

Code:
mkdir -p /var/spool/cron/crontabs
echo "*/3 * * * * /tmp/pinger.sh  > /dev/null 2>&1" > /var/spool/cron/crontabs/admin

echo "/var/spool/cron/crontabs/admin" >> /usr/local/.files
echo "/usr/sbin/crond" >> /usr/local/sbin/post-boot

echo "/tmp/pinger.sh" >> /usr/local/.files
Этот код обеспечит проверку линка раз в 3 минуты.

вы можете подредактировать кронтаб и вручную с помощью
crontab -e
(управлением редактором как в vi)


Крме того, в файл /tmp/pinger.sh необходимо поместить следующий код
(внимание, переводы строк должны быть в unix формате !)

Code:
#!/bin/sh

FILE="/tmp/ping-errors"                 # сюда пишем промежуточное знаение счетчика ошибок
MAXERRORS=2                             # Если больше чем столько раз ошибка пингов - ребутим

code=1
/bin/ping -q -c 2 193.0.0.193
code=$?

if [ $code -gt 0 ]; then
    if [ -f $FILE ]; then               # Проверяем наличие файла с переменной
        . $FILE                         # и инклудим его (и переменную)
    else
        errors=0                        # а если нет - присваиваем начальное значение
    fi
    errors=`expr $errors + 1`           # Приращиваем...
    echo "errors=$errors" > $FILE       # Пишем в файл новое значение
    if [ $errors -gt $MAXERRORS ]; then
        rm -f $FILE
        reboot
    fi
else
    if [ -f $FILE ]; then               # А если получили код заверщения 0
        rm -f $FILE                     # то просто стираем наш файл...
    fi
fi
я для этого воспользовался интернетом - выложил pinger.sh на некий промежутчный сервер и выполнил

Code:
cd /tmp
wget http://my_internet_server.com/pinger.sh
cat /tmp/pinger.sh - должен выдать код нашего скрипта, проверьте все ли скачалось...

А теперь можно и записать измеенения:

Code:
flashfs save && flashfs commit && flashfs enable

После перезагрузки все должно заработать.