1 (edytowany przez qbasasa 2013-04-09 22:59:42)

Temat: QMI na wielu 353u-2 na raz krótki poradnik jak to zrobić.

Hej,
jako że moje trzy modemy (huawei e353u-2, od irlandzkiego meteora) pomimo aktywnego huba usb mają dziwny problem z utrzymaniem połączenia przy użyciu modułu option i zwykłego połączenia modemowego.
(Wieszają się i połączenie można przywrócić tylko wyciągając fizycznie modem z portu.)

Po wielu postach i radach Cezarego odkryłem że są wspierane przez QMI, a dokładniej

kmod-usb-net-qmi-wwan

Jako że standardowy skrypt qmi-network nie wspierał więcej niż jednego połączenia, musiał więc zostać zmodyfikowany, do tego stworzyłem jeszcze prosty skrypt który pilnuje aby połączeni było cały czas wznawiane w przypadku rozłączenia.

Konkrety:

Hardware:

TL-WR1043ND z najnowszym gargoyle.
3 modemy huawei e353u-2
1 modem e3131 hilink
4 karty aero2

Software:

kmod-usb-net-qmi-wwan
libqmi-glib 
multiwan

Co należy zmienić w /usr/bin/qmi-network
to:

print_usage ()
{
    echo "usage: $0 [DEVICE] [COMMAND]"
}

if [ $# -ne 2 ]; then
    echo "error: missing arguments" 1>&2
    print_usage
    exit 255
fi

DEVICE=$1
COMMAND=$2
NUMWAN=$3
STATE_FILE=/tmp/qmi-network-state
PROFILE_FILE=/etc/qmi-network.conf

zamieniamy na to:

print_usage ()
{
    echo "usage: $0 [DEVICE] [COMMAND] [WAN]"
}

if [ $# -ne 3 ]; then
    echo "error: missing arguments" 1>&2
    print_usage
    exit 255
fi

DEVICE=$1
COMMAND=$2
NUMWAN=$3
STATE_FILE=/tmp/qmi-$NUMWAN-network-state
PROFILE_FILE=/etc/qmi-network.conf

Od teraz można połączyć przez qmi-network więcej niż jeden modem.
Zmienia się składnia qmi-network, nalezy jeszcze podać "wan" z /etc/config/network do którego przypisany jest modem u mnie są to wan, wan2, wan3

Przykład:

qmi-network /dev/cdc-wdm0 start wan

Druga rzecz to skrypt który raz uruchomiony pilnuje aby połączenie Qmi było cały czas nawiązane, w razie wykrycia że połączenie zostało rozłączone wznawia je i restartuje odpowiedni wan.
składnia [nazwa skryptu] <urzadzenie> <interfejs>

Przykład:
sh qmi_aero /dev/cdc-wdm0 wan

#!/bin/bash
print_usage ()
{
        echo "usage: $0 [DEVICE] [WAN]"
}

check_conn()
{
        if [ -n "$(qmi-network $DEVICE status $WAN|grep 'Status:  connected')" ] ;
        then
#       logger "Status of QMI: $DEVICE INTERFACE: $WAN - connected"
        echo "0"
        return
        else
        logger "Status of QMI: $DEVICE INTERFACE: $WAN - not connected"
        echo "1"
        return
        fi
}

restart_conn()
{
ifdown $WAN


if [ -f $STATE_FILE ] ;
then
qmi-network $DEVICE stop $WAN
logger "Old instance of QMI: $DEVICE INTERFACE: $WAN - STOPPED"
fi

while [ -z "$(qmi-network $DEVICE start $WAN| grep 'Network started successfully')" ];
        do
        logger "Connecting QMI: $DEVICE INTERFACE: $WAN - failed"
        done

sleep 5

if [ -n "$(qmi-network $DEVICE status $WAN|grep 'Status:  connected')" ] ;

    then
    logger "Connecting QMI: $DEVICE INTERFACE: $WAN - completed"
    ifup $WAN
    else
    logger "Connecting QMI: $DEVICE INTERFACE: $WAN - Error"
    fi

}

if [ $# -ne 2 ]; then
   echo "error: missing arguments" 1>&2
   print_usage
   exit 255
fi

DEVICE=$1
WAN=$2
STATE_FILE=/tmp/qmi-$WAN-network-state

logger "Started script for QMI: $DEVICE INTERFACE: $WAN"
restart_conn
while :
do
if [ -e $DEVICE ] ; then
if [ "$(check_conn)" != "0" ];
        then
        restart_conn
fi
sleep 10
else
sleep 5
done