LINUX.ORG.RU

Проблемы с реконнектом usb модема.


0

0

Использую 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

*проверил... /dev/ttyUSB0 не существует, хотя dmesg при коннекте показывает,что добавлено ttyUSB0 и в скобках указывает что это /dev/usb/tts/0 для devfs...

rap-kasta
() автор топика

у меня в dd-wrt на DIR-320 выгрузка модуля ehci-hcd отключает питание usb порта - может это поможет. ehci-hcd.o используется не родной от dd-wrt, а собранный из исходников прошивки "олега", usb-ohci и usb-uhci у меня не загружены.

inoremap ★★
()
Ответ на: комментарий от inoremap

Вот спасибо, помогло: rmmod ehci-hcd insmod ehci-hcd и всё круто сейчас осталось только чуть переписать "псевдо-демона"...)

rap-kasta
() автор топика
Ответ на: комментарий от rap-kasta

>rmmod ehci-hcd insmod ehci-hcd

наверняка можно питанием на usb управлять через sys или proc

dimon555 ★★★★★
()

Попробуй прошивку отсюда:
http://code.google.com/p/wl500g/

У меня асус wl-500gpv2 проблема аналогичная.
Но я не привязываю напрямую usbserial с модему:
#insmod usbserial vendor=0x16d5 product=0x6501 maxSize=4096
insmod usbserial
insmod option

option - это драйвер для usb модемов

Я слежу за наличием интерфейса ppp0 раз в 10 секунд и если он отсутствует, передергиваю модем командой:
usb_modeswitch -v 0x16d5 -p 0x6501 -d 1 -R &>/dev/null
После чего звоним снова.

kilolife ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.