Использую dlink dir-320 в связке со своим модемом anydata adu e100a.
На роутере стоит "Олеговская" прошивка, которая по сути является
[admin@(none) root]$ uname -a
Linux (none) 2.4.37.5 #2 2009-08-22 11:24:26 MSD mips GNU/Linux
Хотя думаю модель здесь не важна.
Настраивал методом копипасты настроек с текущей линукс-тачки и исправлением их под реалии роутера.
Роутер отлично справляется со своей работой, я наладил автопересоединение, учёт статистики и тд, но вот одна лага сводит все усилия "на нет": при искусственном дисконнекте (ctrl+c, если руками вызываю pppd call; дисконнект со стороны оператора (каждые 480 минут+ в час ночи и в 8 утра)) в "чате" между модемом и chat происходит нечто очень странное (как я понимаю модем шлёт одно и тоже по несколько раз chat'у, пока последний не умрёт по таймауту). Выглядит это так:
[admin@(none) bwww]$ cat /tmp/chat.log
~M-^?}#M-@!}!}!} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"}&M-|~~M-^?}#M-@!}!}"} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"Ln~~M-^?}#M-@!}!}#} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"M-^EM-g~~M-^?}#M-@!}!}$} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"M-IB~~M-^?}#M-@!}!}%} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"} M-K~~M-^?}#M-@!}!}&} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"JY~~M-^?}#M-@!}!}'} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"M-^CM-P~~M-^?}#M-@!}!}(} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"M-C};~~M-^?}#M-@!}!})} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"}*M-^R~~M-^?}#M-@!}!}*} }8}"}&} } } } }#}$M-@#}%}&M-2M-p8H}'}"}(}"@} ~SIGINT
(ну SIGINT - понятно, я сам прервал коннект по ctrl+c).
Проэмулировать достаточно просто: делаем pppd call cdma, ждём когда соеденится, жмём ctrl+c и вуаля, новый коннект будет безуспешным (см выше что будет).
Думал, что проблема в модеме, но подцепил его к своей тачке, сделал тоже самое и...всё отлично. Момент лишь в том что на своей тачке я вызываю коннект так:
pppd /dev/ttyUSB0 115200 file /etc/ppp/peers/cdma user mobile
а в роутере прописано устройство /dev/usb/tts/0 . /dev/ttyUSB0 там тоже существует, но как я понял, pppd той версии, что в роутере, уважает только devfs, однако версия pppd на роутере свежее ( 2.4.5 ), чем на моём арче (2.4.4).
Собственно мои теущие действия для восстановления коннекта: передёрнуть кабель (из модема/в модем ИЛИ аналогично в роутере) или перезагрузить модем. Естественно такое положение дел мне не очень нравится, пробовал после каждого дисконнекта делать rmmod usbserial и insmod, менял задержки и тд - безрезультатно.
Повторюсь, что проблема проявляется не всегда, например если я сам перезагружу модем, разорву соединение через некоторое время работы, то коннект мой псевдо-демон нормально восстановит, а вот если мы имеем дело с искусственными дисконнектами или разрывами сразу после коннекта, то тут проблема встаёт в полный рост.
Как я понимаю, проблема таки где-то в прошивке роутера и сам я понять где не могу, как вариант: может есть какой-то метод "проэмулировать" отключение кабеля (мой метод rmmod+insmod провалился)...?
Ниже мои настройки коннекта и псевдо-демон...
[admin@(none) ppp]$ cat peers/cdma
debug
/dev/usb/tts/0
115200
crtscts
noipdefault
defaultroute
ipcp-accept-local
lcp-echo-interval 60
lcp-echo-failure 5
usepeerdns
nopcomp
noaccomp
nodetach
novj
novjccomp
nobsdcomp
noccp
user "mobile"
password "internet"
connect "/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/cdma.chat 2>/tmp/chat.log"
[admin@(none) ppp]$ cat cdma.chat
'' 'AT'
'OK' 'ATI'
'OK' 'ATE0V1'
'OK' 'AT'
'OK' 'ATDT#777'
'CONNECT' 'OK'
[admin@(none) ppp]$ cat cdma_connect_daemon.sh
#!/bin/sh
while [ 1 ];do
echo "test"
if [ `ps|grep pppd|grep -v 'grep'| wc -l`=0 ]; then
#echo "connect"
rmmod usbserial
sleep 3
insmod usbserial vendor=0x16d5 product=0x6501
sleep 4
echo "`date` Try to connect" >> /tmp/ppp/ppp-stat
pppd call cdma
echo "`date` Connect closed" >> /tmp/ppp/ppp-stat
fi;
#echo "sleep"
sleep 20;
done
[admin@(none) ppp]$ cat ip-down
#!/bin/sh
echo `date` / $CONNECT_TIME / $BYTES_SENT / $BYTES_RCVD >> /tmp/ppp/ppp-stat
flashfs save && flashfs commit && flashfs enable
/sbin/rc