Сброс_зависшего_usb-модема_соединения_3g_4g



Некоторое время назад для использования 4G USB модема на даче мной был приобретен роутер Keenetic 4G rev. B и USB модем Huawei E3272s.

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

К тому времени уже появилась новая модель Keenetic 4G III, и я понадеявшись что проблема с USB модемами в новом устройстве решена таки его купил.

К сожалению, мои надежды не оправдались. И в новом роутере ни один из моих уже трех модемов без танцев с бубном не работал стабильно. Пробовал подключать Huawei E3272s, E398, E3372, напрямую в USB порт, без удлинителей.

Очевидно что модемам не хватало питания (хотя на первый взгляд на USB разъеме роутера гордо висит 5,00в). Первым решением было купить активный USB кабель с возможностью подключения доп. питания на дальнем хвосте от роутера. Выбор пал на 5м кабель с хабом на 2 порта Greenconnection GC-UEC5M3. В паре с адаптером на 5,2в все замечательно заработало, и бонусом на него можно было повесить сразу 2 модема для резервирования канала.

Первый Keenetic 4G, Хотел было уже выбросить, но решил поковырять. Поднял питание USB до 5,2в, уменьшив сопротивление резистора R184 с 8,2ком до 7,8 ком, (поставил параллельно 150 ком) + впаял электролит 3300 мкф х 10в по питанию USB на пустые площадки C463, и о чудо!

Наиболее проблемный модем huawei E3272s, который полностью отказывался работать с роутером отлично завелся и стабильно работает! Сутки полет отличный! Для E392 и E3372 думаю хватит просто электролита без подъема напряжения (если не использовать пассивный USB удлинитель из комплекта или аналогичное барахло с тонкими проводами).

Новый Keenetic III 4G пока не разбирал, но похоже там аналогичная проблема с питанием USB.

Чтобы не ковырять роутеры можно сделать нехитрый сглаживатель пульсаций из USB переходника. Вешаем по питанию электролит 1000-4700 мкф х 10в + керамику 0,22 мкф, запаиваем их параллельно питанию USB и наслаждаемся стабильной работой модема.

Zyxel’ю однозначно не зачет.

Вложения
keenetic4g.jpg
Доработка Keenetic 4G
keenetic4g.jpg (58.55 КБ) 22247 просмотров
usb-cond.jpg
Сглаживание пульсаций питания USB
usb-cond.jpg (13.84 КБ) 22247 просмотров

Как выяснилось, зависания модема (или соединения) 3G/4G для версии прошивки 1 «не лечатся» встроенным софтом.

Казалось бы, всё просто — при наличии соединения пингуем какой-либо ресурс с заданной периодичностью и, не получив ответа (например, на два пинга), сбрасываем модем. Однако, это не реализовано разработчиками, хотя в настройках модема можно задать периодический пинг какого-то ресурса (в /bin/autoping.sh из полезного только ping, и ничего более).

Но можно собрать и использовать утилитку usbreset. А ещё проще — имеющуюся «на борту» утилиту usb_modeswitch, ведь в ней предусмотрен reset !

Итак, пишем командный файлик (назовём его usbmcc):

 #!/bin/sh
# Vendor:Product for Huawei E392
VENDOR_ID=12d1
PRODUCT_ID=1506
# Ping resource & test
PING_RESOURCE=8.8.8.8
TEST_PING="`ping $PING_RESOURCE -c 2 | grep -o '0 packets received'`"
# Test ppp interface string
TEST_PPP="`ifconfig | grep -o ppp`"
if [ "$TEST_PPP" = "ppp" ]; then	echo "ppp found"	if [ "$TEST_PING" != "0 packets received" ]; then	echo "ping resource $PING_RESOURCE - success"	else	echo "ping resource $PING_RESOURCE - unsuccess, reset modem."	/bin/usb_modeswitch -v $VENDOR_ID -p $PRODUCT_ID -R	echo ".reset done, wait 3 minutes for ppp autorestart"	fi
else	echo "ppp not found"
fi 

ID производителя и продукта (в примере — для Huawei E392) можно узнать при помощи утилиты lsusb, установить её можно так:

 opkg install usbutils 

Адрес 8.8.8.8 в примере — DNS
от Google, но можно любой иной, в котором Вы уверены)

Разместим usbmcc в /media/DISK_A1/system/etc, разрешим выполнение

 chmod 755 /media/DISK_A1/system/etc/usbmcc 

и добавим задание для cron — /media/DISK_A1/system/etc/crontabs/root (не забудьте перезапустить cron)

 */5 * * * * /media/DISK_A1/system/etc/usbmcc 

Выполнять usbmcc чаще, чем раз в 5 минут, не следует, поскольку от сброса модема до его автоматического рестарта проходит обычно 2-3 минуты, лучше задать с запасом, при этом в журнале (если выполнялся сброс) будут примерно такие записи:

 20 авг 09:52:49	kernel	usb 1-1.4: reset high speed USB device using dwc_otg and address 30
20 авг 09:54:50	pppd[17825]	No response to 4 echo-requests
20 авг 09:54:50	pppd[17825]	Serial link appears to be disconnected.
20 авг 09:54:50	pppd[17825]	Connect time 1567.7 minutes.
20 авг 09:54:50	pppd[17825]	Sent 110186142 bytes, received 685790327 bytes.
20 авг 09:54:51	dnsmasq[15284]	started, version 2.55 cachesize 150
20 авг 09:54:51	dnsmasq[15284]	reading /etc/resolv.conf
20 авг 09:54:51	dnsmasq[15284]	using nameserver 8.8.4.4#53
20 авг 09:54:51	dnsmasq[15284]	using nameserver 8.8.8.8#53
20 авг 09:54:51	dnsmasq[15284]	read /etc/hosts - 2 addresses
20 авг 09:54:56	pppd[17825]	Connection terminated.
20 авг 09:54:56	pppd[17825]	Modem hangup
20 авг 09:54:56	pppd[17825]	Exit.
20 авг 09:55:01	pppd[15364]	pppd 2.4.4 started by root, uid 0
20 авг 09:55:02	pppd[15364]	Serial connection established.
20 авг 09:55:02	pppd[15364]	Using interface ppp0
20 авг 09:55:02	pppd[15364]	Connect: ppp0 <--> /dev/ttyUSB0
20 авг 09:55:03	pppd[15364]	CHAP authentication succeeded
20 авг 09:55:03	pppd[15364]	CHAP authentication succeeded
20 авг 09:55:03	pppd[15364]	Could not determine remote IP address: defaulting to 10.64.64.64
20 авг 09:55:03	pppd[15364]	local IP address 10.253.255.203
20 авг 09:55:03	pppd[15364]	remote IP address 10.64.64.64
20 авг 09:55:04	dnsmasq[15463]	started, version 2.55 cachesize 150
20 авг 09:55:04	dnsmasq[15463]	reading /etc/resolv.conf
20 авг 09:55:04	dnsmasq[15463]	using nameserver 8.8.4.4#53
20 авг 09:55:04	dnsmasq[15463]	using nameserver 8.8.8.8#53
20 авг 09:55:04	dnsmasq[15463]	using nameserver 8.8.4.4#53
20 авг 09:55:04	dnsmasq[15463]	using nameserver 8.8.8.8#53
20 авг 09:55:04	dnsmasq[15463]	read /etc/hosts - 2 addresses
. 

Периодический пинг какого-то ресурса в настройках модема рекомендуется включить (например, тот же 8.8.8.8 каждые 60 секунд).

 #!/bin/sh
# Vendor:Product for Huawei E392
VENDOR_ID=12d1
PRODUCT_ID=1506
# Ping resources & test packets
PING_RESOURCES="8.8.8.8 8.8.4.4 ya.ru"
TEST_PACKETS=2
# Test interface string
TEST_IFACE="ppp"
TEST_PPP="`ifconfig | grep -o $TEST_IFACE`"
# Temp file
TMP_FILE="/tmp/usbmcc.tmp"
if [ "$TEST_PPP" != "$TEST_IFACE" ]; then	echo "interface $TEST_IFACE not found"
else	echo "interface $TEST_IFACE found"	# Initial success = unsuccess	local success=0	# Resources loop	for resource in $PING_RESOURCES; do	# Ping	ping $resource -c $TEST_PACKETS > $TMP_FILE	# Test for success	echo "ping resource $resource."	if grep -q 'packets received,' $TMP_FILE; then	if grep -q ', 0 packets received,' $TMP_FILE; then	echo ".unsuccess, packets not received"	else	echo ".success"	success=1	break	fi	else	echo ".unsuccess, ping packets not sent"	fi	done	rm -f $TMP_FILE	if [ $success -eq 0 ]; then	echo "reset interface $TEST_IFACE equipment."	/bin/usb_modeswitch -v $VENDOR_ID -p $PRODUCT_ID -R	echo ".reset done, wait 3 minutes for $TEST_IFACE autorestart"	fi
fi 

Теперь мы можем задать несколько серверов в PING_RESOURCES (в примере — два DNS
от Гугла и поисковик Яндекса).

P. P. S. Для некоторых модемов сброс может не проходить и приводить к зависаниям модема и т.п. — такая информация найдена в сети.

Оцените статью
Huawei Devices